How do I test (in one line) if command output contains a certain string?

后端 未结 3 663
北恋
北恋 2020-12-04 14:55

In one line of bash, how do I return an exit status of 0 when the output of /usr/local/bin/monit --version doesn\'t contain exactly 5.5 and an exit

相关标签:
3条回答
  • 2020-12-04 15:41

    Test the return value of grep:

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

    I would recommend cron, it works fine with SALT stack

    0 讨论(0)
  • 2020-12-04 15:43
    ! /usr/local/bin/monit --version | grep -q 5.5
    

    (grep returns an exit-status of 0 if it finds a match, and 1 otherwise. The -q option, "quiet", tells it not to print any match it finds; in other words, it tells grep that the only thing you want is its return-value. The ! at the beginning inverts the exit-status of the whole pipeline.)

    Edited to add: Alternatively, if you want to do this in "pure Bash" (rather than calling grep), you can write:

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

    ([[...]] is explained in §3.2.4.2 "Conditional Constructs" of the Bash Reference Manual. *5.5* is just like in fileglobs: zero or more characters, plus 5.5, plus zero or more characters.)

    0 讨论(0)
  • 2020-12-04 15:43
    [ $(/usr/local/bin/monit --version) == "5.5" ] 
    

    eg-1: check for success

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

    eg-2: check for failure

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

    or, to just check if the output contains 5.5:

    [[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"
    
    0 讨论(0)
提交回复
热议问题