如何testing(在一行中)如果命令输出包含某个string?

在bash的一行中,当/usr/local/bin/monit --version的输出不包含5.5和退出状态为1时,如何返回退出状态0?

 ! /usr/local/bin/monit --version | grep -q 5.5 

(如果find匹配,则grep返回0的退出状态,否则返回1; -q选项“quiet”表示不打印它find的任何匹配;换句话说,它告诉grep唯一的一件事想要的是它的返回值, !开始时反转了整个pipe道的退出状态。)

编辑补充:另外,如果你想在“纯粹的Bash”(而不是调用grep )中做到这一点,你可以写:

 [[ $(/usr/local/bin/monit --version) != *5.5* ]] 

[[...]]Bash参考手册的第3.2.4.2节“条件构造”中进行了解释。 *5.5*就像在fileglobs中:零个或多个字符,外加5.5 ,外加零个或多个字符。

 [ $(/usr/local/bin/monit --version) == "5.5" ] 

eg-1:检查成功

 [ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK" 

例如-2:检查失败

  [ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK" 

或者,只是检查输出是否包含5.5

 [[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"