私は小さなbashスクリプトを書いた。言葉を見つけようとします間違い。見つかった場合、結果の値はゼロ以外の数値(例:25。スクリプトで言及されていますが変数の数値です)になり、見つからない場合はゼロになります。
case
私の質問は:出力がゼロ以外の場合は、次のコマンドが実行されるようにステートメントを使用したいと思います。
truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit &
スクリプトはここにあります:
#! /bin/bash
case "$(grep ERROR /root/test/wayfile.log | wc -w)" in
25) echo "empty log file and kill screen: $(date)" >> /var/log/finderror.txt
truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit &
;;
0) # all ok
;;
esac
答え1
1つのオプション:case
を見つけるように指示します0
。この場合: 何もしません。そうでなければ, コマンドを実行します。
case X in
(0) : ## do nothing
;;
(*) truncate ...
;;
esac
別のオプション:case
ゼロ以外の数字を見つけるように指示します。
case X in
([123456789]) truncate ...
esac
...しかし、数字を一致させるのではなく、次を使用case
しますtest
。
if [ "$(grep -c ERROR /root/test/wayfile.log)" -gt 0 ]
then
truncate ...
fi
私はそれをgrep ... | wc -w
単に単純化しましたgrep -c
が、これgrep
を含むよりも計算が必要ですwc
。
しかもあなただから本物ERROR
その単語がファイルに存在するかどうかに興味がある場合は、その単語が存在するかどうかをgrep
尋ねることができます。
if grep -F -q ERROR /root/test/wayfile.log
then
truncate ...
fi
この-F
フラグはgrepに、検索テキストがプレーンテキスト(「固定」)であることを伝えます。この-q
フラグはgrepに「静か」を指示します。一致する行を計算または出力せずにテキストが見つかったかどうかに基づいて検索します。いいえ)終了ステータスを設定します。成功した終了コード(0)は、検索テキストがファイルに1回以上見つかったことを意味し、失敗は検索テキストがファイルにまったく見つからなかったことを意味します。