如何从执行命令的结果中执行 if 语句

dja*_*fan 85 shell bash text-processing netstat

我正在尝试从已执行命令的输出中执行 IF 语句。这是我尝试这样做的方法,但它不起作用。有谁知道正确的方法来做到这一点?

if [ "`netstat -lnp | grep ':8080'`" == *java* ]; then
  echo "Found a Tomcat!"
fi
Run Code Online (Sandbox Code Playgroud)

iru*_*var 99

使用 bash[[条件构造并首选$(<command>)命令替换约定。此外,[[防止变量值的分词,因此无需引用命令替换位。

if [[ $(netstat -lnp | grep ':8080') = *java* ]]; then
  echo "Found a Tomcat!"
fi
Run Code Online (Sandbox Code Playgroud)


Ran*_*832 40

另一种选择是简单地测试grep自身的退出状态,如果没有匹配项,它将返回 false (1),如果有匹配项,则返回 true (0),不使用该[命令。

if netstat -lntp | grep ':8080.*java' > /dev/null; then
    echo "Found a Tomcat!"
fi
Run Code Online (Sandbox Code Playgroud)

重定向到 /dev/null 是为了防止它也将找到的行打印到屏幕上。

  • 注意 grep 的 `-q` 选项,而不是重定向到 /dev/null。使用`-q`,grep 不输出任何内容并在第一次匹配后停止搜索。 (16认同)

Rob*_*Bos 7

更简单的,

netstat -lntp | grep ':8080.*java' > /dev/null && command
Run Code Online (Sandbox Code Playgroud)

如果你只想做一件事。