在一行bash中,如果输出/usr/local/bin/monit --version不完全包含5.5,退出状态为1时,如何返回退出状态0 ?
rua*_*akh 96
! /usr/local/bin/monit --version | grep -q 5.5
Run Code Online (Sandbox Code Playgroud)
(grep如果找到匹配则返回退出状态0,否则返回1.-q选项"quiet"告诉它不打印它找到的任何匹配;换句话说,它告诉grep你唯一想要的是它的返回-value.!开头反转整个管道的退出状态.)
编辑添加:或者,如果你想在"纯Bash"(而不是调用grep)中这样做,你可以写:
[[ $(/usr/local/bin/monit --version) != *5.5* ]]
Run Code Online (Sandbox Code Playgroud)
(在Bash参考手册的 §3.2.4.2"Conditional Constructs"中[[...]]有解释.就像在fileglobs中一样:零个或多个字符,加上零个或多个字符.)*5.5*5.5
per*_*eal 22
[ $(/usr/local/bin/monit --version) == "5.5" ]
Run Code Online (Sandbox Code Playgroud)
eg-1:检查是否成功
[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK"
Run Code Online (Sandbox Code Playgroud)
例如-2:检查失败
[ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK"
Run Code Online (Sandbox Code Playgroud)
或者,只检查输出是否包含5.5:
[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"
Run Code Online (Sandbox Code Playgroud)
小智 7
测试grep的返回值:
sudo service xyz status | grep 'not' &> /dev/null
if [ $? == 0 ]; then
echo "whateveryouwant"
fi
Run Code Online (Sandbox Code Playgroud)
我推荐 cron,它与 SALT 堆栈配合得很好