grep
命令是非常强大的搜索工具,可以匹配常规字符串,也可以使用正则表达式匹配(-e
或-E
选项),可以匹配单个文件,也可以匹配多个文件(使用通配符标识需要进行匹配的文件),可以匹配当前文件夹下的文件,也可以递归匹配目录下的文件(-r
选项)。
在某些情况下,我们需要判断grep命令是否成功匹配到内容(也即判断目标文件内是否存在我们要查找的内容)。一般有两种方法可以实现:
借助上一进程的返回值
判断匹配结果是否为空字符串
第一种方法通过判断上一进程的返回值(紧接在执行完grep命令之后),成功执行返回0
,执行失败返回1
。紧接在grep执行之后,判断$?
是否为0,可以实现判断是否匹配到查找的内容,示例如下:
# 查找a.txt中是否存在www.字符串
grep "www." a.txt
if [ $? -eq 0 ]
then
echo "find www."
fi
第二种方法将grep的匹配结果赋值给一个变量,判断变量字符串长度是否为零,可以实现判断grep是否查找到相应的内容。示例如下:
match_str=`grep "www." a.txt`
if [ -n "$match_str" ]
then
echo "find www."
fi
注意,上述if
判断中一定要把匹配结果变量加上双引号,标识为字符串,否则如果match_str
为空,脚本会报错。
判断字符串长度是否为零(为空)有两种方式:
-n
字符串长度不为零(True),为零(False)
-z
字符串长度为零(True),不为零(False)
当然,也可以使用逻辑非!
表达式将判断结果反转,如判断一个字符串a为零,可以表示为:if [ -z "$a" ]
或 if [ ! -n "$a" ]
补充知识:
# 获得当前进程 ID
$$
# 获得之前(上一个)进程 ID
$!
# 获得之前(上一个)进程结束的状态码 (0 表示成功, 1 表示失败)
$?
参考:
shell中[]
和[[]]
的区别
Linux shell 逻辑运算符、逻辑表达式、通配符、元字符、转义符详解shell逻辑运算符寰宇001的博客-CSDN博客