如何根据执行命令的结果执行 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

另一种替代方法是简单地测试其自身的退出状态grep,如果没有匹配,则返回 false(非零),如果有匹配,则返回 true(零),而不使用该[命令。

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."

相关内容