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
ディスカッション
コメント一覧
まだ、コメントがありません