アプリ版:「スタンプのみでお礼する」機能のリリースについて

if文について教えてもらえませんでしょうか。

hoge1.txt 内に”Test"
という文字列が別の行に2回登場するときのみ、if文で特定のコマンドを行いたいです(ここではecho hello)。
つまり
grep "Test" hoge1.txt | wc -l
>2
という出力があった時のみecho helloを行い、elseの場合にはecho byeを行いたいのですが、こういったことは可能なのでしょうか。
よろしくお願いいたします。

A 回答 (2件)

可能です。



if 〜 は 、コマンド 〜 の終了ステータスが0のときthen節、0でないときelse節となります。
ですから、「hoge1.txt 内に”Test"という文字列が別の行に2回登場するとき」0、そうでないとき0以外で終了するコマンド」を書けばいいのです。

例えば

・` (バッククオート)で括ると、「コマンドを実行した結果、出力された文字」を「文字列」にすることができます。
変数に入れたり、testコマンドの引数に使うことができます。

・ grep は検索パターンが見つかると0を返します。
wc -lの出力を「2に等しい(他の文字は入らない」というパターンでgrepすれば、判定できます。
そのままだと見つかった行が出力されてしまうので、-qで表示を抑制します。
    • good
    • 1
この回答へのお礼

grep -E 'Test' hoge1.txt | grep "2"
if [ $? -eq 1 ]; then
echo hello
else
echo bye
fi
でやってみたところうまくいきました。
ありがとうございました。

お礼日時:2017/02/14 13:21

if [ "`grep 'Test' hoge1.txt | wc -l`" = "2" ]; then


 echo hello
else
 echo bye
fi

でよいような気も…。
# シングルクォートとバッククォートがあるので注意。

エスケープして
if [ "`grep \"Test\" hoge1.txt | wc -l`" = "2" ]; then
でもいいかも知れませんけど。
    • good
    • 1
この回答へのお礼

ご返答ありがとうございます。
教えていただいたようにやってみたのですが、うまくいきませんでした。
[]内に引数を設定していたからかもしれません。
でも、shell初心者の私としては大変勉強になりました。
ありがとうございました!

お礼日時:2017/02/14 13:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!