実行されたコマンドの出力でIFステートメントを実行しようとしています。これは私が試したことですが、うまくいきません。誰もがこれを行う正しい方法を知っていますか?
if [ "`netstat -lnp | grep ':8080'`" == *java* ]; then
echo "Found a Tomcat!"
fi
編集:終了コードをキャプチャしてこれを行う方法があるかどうか疑問に思います。
答え1
bash[[
条件付き構成を使用し、$(
<command>)
コマンド置換規則を優先します。また、[[
変数値の単語分割を防止できるため、命令置換ビットを引用する必要はありません。
if [[ $(netstat -lnp | grep ':8080') == *java* ]]; then
echo "Found a Tomcat!"
fi
答え2
もう1つの選択肢は、コマンドを使用せずに単に自己終了状態をテストし、一致するものがgrep
ない場合はfalse(0ではない)を返し、一致するものがある場合はtrue(0)を返すことです[
。
if netstat -lntp | grep -q ':8080.*java'; then
echo "Found a Tomcat!"
fi
答え3
よりシンプルで、
netstat -lntp | grep ':8080.*java' > /dev/null && command
ちょうどひとつだけやりたいなら。
答え4
私の音楽プレーヤーが開いていること、そして開いているときに曲が再生されることを確認するスクリプトで行うことは次のとおりです。
rbstatus=$(rhythmbox-client --print-playing)
pgrep -x rhythmbox >/dev/null && if [ "$rbstatus" = "-" ]; then
echo "No music playing"
else
rhythmbox-client --print-playing
fi || echo "Music player is Closed."