在一行bash中,当/usr/local/bin/monit --version
的输出不包含5.5
且退出状态为1时,如何返回退出状态为0?
答案 0 :(得分:92)
! /usr/local/bin/monit --version | grep -q 5.5
(grep
如果找到匹配则返回退出状态0,否则返回1. -q
选项“quiet”告诉它不打印它找到的任何匹配;在其他单词,它告诉grep
你唯一想要的就是它的返回值。开头的!
会反转整个管道的退出状态。)
编辑添加:或者,如果您想在“纯Bash”中执行此操作(而不是调用grep
),您可以写:
[[ $(/usr/local/bin/monit --version) != *5.5* ]]
{[[...]]
中解释了*5.5*
。5.5
就像在fileglobs中一样:零个或多个字符,加上{{1}},加上零个或多个字符。)
答案 1 :(得分:21)
[ $(/usr/local/bin/monit --version) == "5.5" ]
例如-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"
答案 2 :(得分:1)
测试grep的返回值:
sudo service xyz status | grep 'not' &> /dev/null
if [ $? == 0 ]; then
echo "whateveryouwant"
fi
我会推荐使用cron,它可以正常使用SALT堆栈