gpt4 book ai didi

bash - 如何 grep 然后在 grep 的特定输出上使 if 语句失败?

转载 作者:行者123 更新时间:2023-11-29 08:53:13 45 4
gpt4 key购买 nike

好的,我需要找到命令给出的输出,特别是“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

最佳答案

你不需要 '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

grep-q 选项会抑制所有输出(POSIX 和 GNU 变体),因此您只需获取 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

关于bash - 如何 grep 然后在 grep 的特定输出上使 if 语句失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227428/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com