grep -xで使用する方法

grep -xで使用する方法

これは私のコードです。

if grep -x $idle | grep -x $dead | grep -x $busy ./Event.log
 then 
   echo " Events are running Successfully" >> ./Event.log
 else 
   echo "One or more Events are down. Check the log and restart the Events." >> ./Event.log
fi

次のエラーが発生します。

grep: 0652-033 Cannot open 1.
grep: 0652-033 Cannot open 0.
grep: 0652-033 Cannot open 0.

if条件が満たされてもelseブロックに入ります。

誰が私を助けることができますか?

答え1

このコマンドgrepには2つのパラメータがあります。模様そして文書。入力がパイプまたはリダイレクトを介して標準入力に接続されている場合は、|このファイルを省略できます<。あなたの例ではそうではないので、最初の人はgrepパターンを見つける場所を知りません。次のように書く必要があります。

grep -x $idle Event.log | grep -x $dead | grep -x $busy

2番目と3番目のgrepsはパイプから読み取られるため、ファイル引数は必要ありません。

しかし、あなたの場合は、3つの代替文字列を見つけるのが良いと思います。したがって、を|使用または使用せずに代替演算子を使用できます。たとえば、次のようになります。grep -E\|-E

if grep -x "$idle\|$dead\|$busy" ./Event.log >/dev/null
    then
    echo " Events are running Successfully" >> ./Event.log
else
    echo "One or more Events are down. Check the log and restart the Events." >> ./Event.log
fi

答え2

正規表現を引用し(シェルワード分離規則を避けるため)、オプションを無効にし(正規表現の先行ハイフンがoptionsで処理されるのを避けるためgrep)、標準入力がgrepさ​​れていることを正式に表示する必要があります。

$ x="hi there"; (echo hi there; echo bye there) | grep -- "$x" -
hi there

テスト条件の結果のみが必要な場合でも、-qオプションがgrep関連する可能性があります。

関連情報