我正在尝试从执行命令的输出中执行 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."