web-dev-qa-db-ja.com

出力のgrepに1行の文字列がある場合にtrueを返すかどうかをテストします

サービスが実行されている場合にtrueまたはfalseを返したいだけです。ここが私がいるところです、最初の試みや最後ではなく、執筆時の現在です:

service iptables status | grep -qi "not running"

停止したときのservice iptables statusのsdtoutはiptables: Firewall is not runningです。0がtrueで0以外がfalseであるため、思いついたのは新しい行に何もないことです。だから、私はそれが機能することを確認するためにテストする必要がありますが、私は何をすべきかわかりません。ここに試してみます:

service iptables status | grep -qi "not running" || echo "stopped"

そのため、サービスが停止するとstoppedが表示されると予想していましたが、新しい行しかありませんでした。

5
jeremy.bass
service iptables status | grep -qi "not running" && echo "stopped"

||&&に置き換えるだけです。シェルスクリプトの1つの紛らわしいことは、他のほとんどの言語とは逆に、0がtrueで他の数値がfalseであることです。これは、プログラムが通常、成功すると0を返すためです。

Stderrへのディストリビューション出力で、ステータスの後に2>&1serviceとして追加する必要もありますが、問題はないようです。

4
Graeme