質問: ``` >>vi abc.log ↓ 10 20 30 40 50 ``` abc.log の内容は上記のようになっています。 「40」「50」が含まれていた場合は「NG」、 それ以外の時は「Ok」を結果として返す、 シェルプログラムの作成方法(記述方法)を教えていただけないでしょうか?
回答: Csh の場合、直前のコマンドの終了ステータスは `$status` で参照出来ます(tcsh では `$?` も使えるようです)。 `if` 文では C言語風に数値の比較を行なえます。 ``` #!/bin/csh -f grep -qE '^(40|50)$' abc.log if ($status == 0) then # 40 か 50 の行があった echo "NG" else # 40 か 50 の行はなかった echo "OK" endif ``` また、`if` 文などの中で式が書ける場所では `{ }` で囲みコマンドの実行を行なえます。 この部分の値はコマンドの終了ステータスが成功(0)ならば `1` に、そうでなければ `0` になります。 よって、上の `grep` と `if` は、このように書く事も出来ます。 ``` if ({ grep -qE '^(40|50)$' abc.log }) then ``` 参考: csh(1) - Linux man page Man page of TCSH - JM Project