BashスクリプトCase文(if-not論理)

BashスクリプトCase文(if-not論理)

私は小さな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回以上見つかったことを意味し、失敗は検索テキストがファイルにまったく見つからなかったことを意味します。

関連情報