如何测试(在一行中)命令输出是否包含某个字符串?

时间:2012-09-11 18:27:55

标签: bash

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

3 个答案:

答案 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堆栈