如何将 if 与 grep -x 一起使用

如何将 if 与 grep -x 一起使用

这是我的代码:

if grep -x $idle | grep -x $dead | grep -x $busy ./Event.log
 then 
   echo " Events are running Successfully" >> ./Event.log
 else 
   echo "One or more Events are down. Check the log and restart the Events." >> ./Event.log
fi

我收到以下错误:

grep: 0652-033 Cannot open 1.
grep: 0652-033 Cannot open 0.
grep: 0652-033 Cannot open 0.

即使if条件满足,它也会进入else块。

谁可以帮我这个事?

答案1

命令grep有两个参数:图案文件。如果输入通过管道|或重定向连接到标准输入,则可以省略该文件<。在您的示例中,情况并非如此,因此第一个grep不知道在哪里寻找模式。你需要这样写:

grep -x $idle Event.log | grep -x $dead | grep -x $busy

请注意,第二个和第三个greps 不需要文件参数,因为它们从管道读取。

然而,就你的情况而言,我猜你宁愿寻找三个替代字符串。因此,您可以使用|带有grep -E\|不带有 的替代运算符-E,例如:

if grep -x "$idle\|$dead\|$busy" ./Event.log >/dev/null
    then
    echo " Events are running Successfully" >> ./Event.log
else
    echo "One or more Events are down. Check the log and restart the Events." >> ./Event.log
fi

答案2

您可能需要引用正则表达式(以避免 shell 分词规则),禁用选项(以避免正则表达式中的前导连字符被视为 的选项grep),并正式指示正在对 stdin 进行 grep。

$ x="hi there"; (echo hi there; echo bye there) | grep -- "$x" -
hi there

如果您只需要测试条件的结果,-q则选项grep也可能相关。

相关内容