2012-09-11 28 views

答えて

80
! /usr/local/bin/monit --version | grep -q 5.5 

grepは、一致が見つかった場合は0の終了ステータスを返し、1別段-qオプション、「静か」、それが見つかった一致を出力しないことを指示し、言い換えれば、それは指示しますあなたは純粋な「でこれを行うにしたい場合はまた、:。。あなたが望む唯一のことは、その戻り値で先頭に!は、パイプライン全体の終了ステータスを反転させていること)

追加する編集grepgrepを呼び出すのではなく)「Bash」と書いてください。

[[ $(/usr/local/bin/monit --version) != *5.5* ]] 

[[...]]§3.2.4.2 "Conditional Constructs" of the Bash Reference Manualで説明されている。 *5.5*はちょうどfileglobsのようである:ゼロ個以上の文字、プラス5.5、プラスゼロ以上の文字)

+0

は私のベーコンを保存して、それが正常に動作します! – mhenrixon

+0

エフィング天才!パイプのパワーは絶えず印象的です。 –

+0

失敗したときに '/ usr/local/bin/monit --version'の値をエコーアウトするものはありますか? –

20
[ $(/usr/local/bin/monit --version) == "5.5" ] 

例えば-1:成功のためのチェック

[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK" 

例えば-2:失敗をチェックします

[ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK" 

や、出力が含まれている場合にだけチェックする5.5

[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK" 
+0

"5.5"は大量の出力の一部になります。 –

+0

は答えを – perreal

+0

@perrealに更新しました - 正規表現をbashで引用することはできません。正規表現ではなくリテラル文字列になります。 (クォートはいくつかの古いバージョンのbashで動作しますが、バグとして修正されました)。 – jordanm

0

テストのgrepの戻り値:

sudo service xyz status | grep 'not' &> /dev/null 
if [ $? == 0 ]; then 
    echo "whateveryouwant" 
fi 

私はcronのをお勧めしますSALTスタック

関連する問題