Unix使用grep用if

0 unix linux bash shell

这是我的代码

if [[ (grep -x $idle | grep -x $dead | grep -x $busy) || grep -x $idle1 | grep -x $dead | grep -x $busy1 ]] ./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
Run Code Online (Sandbox Code Playgroud)

我收到了错误

0403-057 Syntax error at line 14 : `-x' is not expected.
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

ric*_*ici 5

在bash中,[[语法上是一个以匹配结束的命令]].它不是if命令语法的一部分,其语法开始:

    if commands ; then
Run Code Online (Sandbox Code Playgroud)

如果要测试命令是否 成功,则只需执行以下操作:

if grep -q pattern file; then
  # grep found pattern in file
else
  # grep did not find pattern in file
fi
Run Code Online (Sandbox Code Playgroud)

[[命令中,bash期望找到条件表达式,而不是另一个命令.这就是grep -x ...语法错误的原因.-x是条件表达式中的一元运算符,如果其参数是可执行文件的名称,则为true,但在该表达式中,它被用作二进制运算符.

如果您希望测试多个模式grep,可以使用该-e选项指定每个选项; grep将成功(或选择)与任何选项匹配的行:

if grep -q -e pattern1 -e pattern2 file; then
  # grep found pattern1 or pattern2 in file
else
  # grep did not find either pattern in file
fi
Run Code Online (Sandbox Code Playgroud)