grep
命令是非常強(qiáng)大的搜索工具松忍,可以匹配常規(guī)字符串蹋绽,也可以使用正則表達(dá)式匹配(-e
或-E
選項)甥郑,可以匹配單個文件逃魄,也可以匹配多個文件(使用通配符標(biāo)識需要進(jìn)行匹配的文件),可以匹配當(dāng)前文件夾下的文件澜搅,也可以遞歸匹配目錄下的文件(-r
選項)伍俘。
在某些情況下,我們需要判斷grep命令是否成功匹配到內(nèi)容(也即判斷目標(biāo)文件內(nèi)是否存在我們要查找的內(nèi)容)勉躺。一般有兩種方法可以實現(xiàn):
借助上一進(jìn)程的返回值
判斷匹配結(jié)果是否為空字符串
第一種方法通過判斷上一進(jìn)程的返回值(緊接在執(zhí)行完grep命令之后)癌瘾,成功執(zhí)行返回0
,執(zhí)行失敗返回1
饵溅。緊接在grep執(zhí)行之后妨退,判斷$?
是否為0,可以實現(xiàn)判斷是否匹配到查找的內(nèi)容蜕企,示例如下:
# 查找a.txt中是否存在www.字符串
grep "www." a.txt
if [ $? -eq 0 ]
then
echo "find www."
fi
第二種方法將grep的匹配結(jié)果賦值給一個變量咬荷,判斷變量字符串長度是否為零,可以實現(xiàn)判斷grep是否查找到相應(yīng)的內(nèi)容轻掩。示例如下:
match_str=`grep "www." a.txt`
if [ -n "$match_str" ]
then
echo "find www."
fi
注意幸乒,上述if
判斷中一定要把匹配結(jié)果變量加上雙引號,標(biāo)識為字符串唇牧,否則如果match_str
為空罕扎,腳本會報錯。
判斷字符串長度是否為零(為空)有兩種方式:
-n
字符串長度不為零(True)丐重,為零(False)
-z
字符串長度為零(True)腔召,不為零(False)
當(dāng)然,也可以使用邏輯非!
表達(dá)式將判斷結(jié)果反轉(zhuǎn)扮惦,如判斷一個字符串a(chǎn)為零臀蛛,可以表示為:if [ -z "$a" ]
或 if [ ! -n "$a" ]
補充知識:
# 獲得當(dāng)前進(jìn)程 ID
$$
# 獲得之前(上一個)進(jìn)程 ID
$!
# 獲得之前(上一個)進(jìn)程結(jié)束的狀態(tài)碼 (0 表示成功, 1 表示失敗)
$?
參考:
shell中[]
和[[]]
的區(qū)別
Linux shell 邏輯運算符、邏輯表達(dá)式崖蜜、通配符掺栅、元字符、轉(zhuǎn)義符詳解shell邏輯運算符寰宇001的博客-CSDN博客