私のbashはなぜ失敗するのですか?

コマンド

grep shutting log.log

何も返しません。

私のスクリプトは以下の通りです

#!/bin/bash
FAIL=`grep shutting log.log`
if [ "$FAIL"="Binary file log.log matches"  ]; then
    echo FOUND
else
    echo NOT FOUND
fi

私は見つからないと思っていますが、

1
if文の前に echo $ FAIL してみましたか?
追加された 著者 Ed Heal,

2 答え

= 演算子は [...] 式にスペースを入れなければなりません。あなたが書いたものは、 string が空でないかどうかをテストする [string] として解釈されています。

しかし、ここではバッククイックや文字列の比較は必要ありません。代わりにこれを試してください:

if grep -q shutting log.log
then echo FOUND
else echo NOT FOUND
fi

(ありがたいことに、 grep -q オプションを持たないシステムは、長い間、空の偉大なビットバケツに行きました。

8
追加された

テストでは、 = の周囲にスペースが必要です。

#!/bin/bash
FAIL=`grep shutting log.log`
if [ "$FAIL" = "Binary file log.log matches"  ]; then
    echo FOUND
else
    echo NOT FOUND
fi

See http://tldp.org/LDP/abs/html/comparison-ops.html

1
追加された