edu*_*ike 9 error-handling bash grep if-statement
好的,我需要找到一个命令给出的输出,注意"gbak:ERROR",然后失败.我不知道我是否以正确的方式进行,如果grep输出到/ dev/null我尝试失败,但是我无法使其工作(可能只是糟糕的语法).我相信这很简单,请告诉我.
我现在得到的if语句是:
if [ `sudo -u firebird $GBAK_COMMAND | grep "gbak: ERROR"` == *gbak: ERROR* ]; then
echo "$DATE Unsucessful $1.gdb Gbak. Incorrect user/password" >> /var/log/messages
echo "Failed"
exit 1
else
echo "pass"
fi
Run Code Online (Sandbox Code Playgroud)
Jon*_*ler 11
你不需要'test'操作符方括号; 只测试退出状态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
Run Code Online (Sandbox Code Playgroud)
抑制所有输出(POSIX和GNU变体)的-q选项,grep以便您获得状态,即if测试.如果grep找到模式,则返回成功,这意味着firebird命令失败.唯一的遗留问题是'确实firebird将其错误写入标准输出或标准错误?' 如果需要重定向标准错误,请写:
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
Run Code Online (Sandbox Code Playgroud)