サービスが実行されている場合に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
が表示されると予想していましたが、新しい行しかありませんでした。
service iptables status | grep -qi "not running" && echo "stopped"
||
を&&
に置き換えるだけです。シェルスクリプトの1つの紛らわしいことは、他のほとんどの言語とは逆に、0がtrueで他の数値がfalseであることです。これは、プログラムが通常、成功すると0を返すためです。
Stderrへのディストリビューション出力で、ステータスの後に2>&1
をservice
として追加する必要もありますが、問題はないようです。