grepコマンドで終了ステータスコード(grep -p ~)を取得

grepコマンドで特定の文字を含む場合に、下記のようにgrepコマンドとwcコマンドを利用して検索結果の行数を取得してif文で分岐をよく使っています

#!/bin/bash

cnt=$(grep ERROR test.log | wc -l)

if [ $cnt -ge 1 ]; then
  echo "ERRORの文字列見つかりました"
fi

ChatGPT等などでシェルスクリプトを作成方法を調べると「grep -q 検索文字数 ファイル名」とやると、grepコマンドの結果の終了ステータスコードを取得できます。詳細は以下となります

grep コマンドの -q オプションは「サイレントモード」として動作し、検索結果の有無のみを確認します。

具体的には以下のような動作をします:

  • -q オプションを付けて grep を実行した場合、一致する行が見つかっても出力を表示しません。
  • 一致する行があれば、grep コマンドは終了ステータス 0(成功)を返します。
  • 一致する行がない場合は、終了ステータス 1(失敗)を返します。

「grep -q 検索文字数 ファイル名」を利用して、grepコマンドで特定の文字を含む場合にif文で分岐する際は、以下のようなシェルスクリプトとなり、必要な行数が減ってスッキリとしたシェルスクリプトになります

#!/bin/bash

if grep -q ERROR test.log; then
  echo "ERRORの文字列見つかりました"
fi

 

スポンサーリンク

0
0