コマンドの実行結果に基づいてif文を実行する方法

コマンドの実行結果に基づいてif文を実行する方法

実行されたコマンドの出力で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."

関連情報