82

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

4

3 回答 3

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

(grep如果找到匹配项,则返回退出状态 0,否则返回 1。-q选项“quiet”告诉它不要打印找到的任何匹配项;换句话说,它告诉grep你唯一想要的就是它的返回-value。!开头的 反转整个管道的退出状态。)

编辑添加:或者,如果您想在“纯 Bash”(而不是调用grep)中执行此操作,您可以编写:

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

(在Bash 参考手册的第 3.2.4.2 节“条件构造”中[[...]]有解释。就像在 fileglobs 中一样:零个或多个字符,加上,加上零个或多个字符。)*5.5*5.5

于 2012-09-11T18:32:38.980 回答
28
[ $(/usr/local/bin/monit --version) == "5.5" ] 

eg-1:检查成功

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

eg-2:检查失败

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

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

[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"
于 2012-09-11T18:32:54.090 回答
6

测试grep的返回值:

sudo service xyz status | grep 'not' &> /dev/null
if [ $? == 0 ]; then
   echo "whateveryouwant"
fi

我会推荐 cron,它适用于 SALT 堆栈

于 2017-12-19T13:30:19.833 回答