How to grep and then fail an if-statement on specific output from grep?

后端 未结 1 1756
北恋
北恋 2021-02-14 10:29

Ok I need to find the output that a command gives, notely \"gbak: ERROR\" and then fail on it. I don\'t know if I\'m going about it the right way, I tried to make if fail if the

1条回答
  •  野趣味
    野趣味 (楼主)
    2021-02-14 11:15

    You don't need the 'test' operator square brackets; just test the exit status of grep:

    if sudo -u firebird $GBAK_COMMAND | grep -q "gbak: ERROR"
    then
       echo "$DATE Unsuccessful $1.gdb Gbak. Incorrect user/password" >> /var/log/messages
       echo "Failed"
       exit 1
    else
       echo "pass"
    fi
    

    The -q option to grep suppresses all output (POSIX and GNU variants) so you just get the status, which the if tests. If grep finds the pattern, it returns success, which means that the firebird command failed. The only residual issue is 'does firebird write its error to standard output or to standard error?' If you need to redirect the standard error, write:

    if sudo -u firebird $GBAK_COMMAND 2>&1 | grep -q "gbak: ERROR"
    then
       echo "$DATE Unsuccessful $1.gdb Gbak. Incorrect user/password" >> /var/log/messages
       echo "Failed"
       exit 1
    else
       echo "pass"
    fi
    

    0 讨论(0)
提交回复
热议问题