※MACターミナル(BSD系)での動作確認です。

スポンサーリンク

grep時に$?を参照して、検索にマッチしたか否かをif文で判定

grep時に$?を参照

grep時に$?の変数を参照することで、grep検索にマッチしたかを確認することができます。
$?が0の時はgrep検索にマッチした行があり、$?が1の時はgrep検索にマッチした行がなし。

例えば、下記のin.txtがあったとします。

 $ cat in.txt 
line001
line002
linetarget003
line004

下記のように、"target"の文字列をgrep検索します。
 $ grep "target" in.txt 
 

下記が実行結果になります。
 $ grep "target" in.txt 
linetarget003

マッチした行があるので、$?が0となっているのが確認できます。
 $ echo $?
0

下記のように、"NO"の文字列をgrep検索します。

 $ grep "NO" in.txt 

マッチした行がないので、$?が1となっているのが確認できます。
 $ grep "NO" in.txt 
 $ echo $?
1

スポンサーリンク

if文で判定

if文で$?を参照して判定するのも良いかと思います。

同様に、下記のin.txtがあったとします。

 $ cat in.txt 
line001
line002
linetarget003
line004

下記が、grep検索にマッチした場合のサンプルコードになります。
 $ cat sample1.sh 
#!/bin/sh

grep "target" in.txt

if [ $? = 0 ]; then
	echo "grep検索にマッチした行があり"
else
	echo "grep検索にマッチした行はなし"
fi

下記が実行結果になります。
 $ ./sample1.sh 
linetarget003
grep検索にマッチした行があり

下記が、grep検索にマッチしなかった場合のサンプルコードになります。

 $ cat sample2.sh 
#!/bin/sh

grep "NO" in.txt

if [ $? = 0 ]; then
	echo "grep検索にマッチした行があり"
else
	echo "grep検索にマッチした行はなし"
fi

下記が実行結果になります。
 $ ./sample2.sh 
grep検索にマッチした行はなし

スポンサーリンク