shell脚本中预期的条件二元运算符

Ang*_*gus 14 shell

我正在尝试一个简单的程序来比较存储在日志文件中的字符串值,并收到如下错误,

#!/bin/bash

check_val1="successful"
check_val2="completed"
log="/compile.log"

if [[ grep $check_val1 $log -ne $check_val1 || grep $check_val2 $log -ne $check_val2 ]];
then
        echo "No Error"
else
        echo "Error"
fi


Error:

./simple.sh: line 7: conditional binary operator expected
./simple.sh: line 7: syntax error near `$check_val1'
./simple.sh: line 7: `if [[ grep $check_val1 $log -ne $check_val1 || grep $check_val2 $log -ne $check_val2 ]];'
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 18

问题在于你的if [[...]]表达式,你使用2个grep命令而不使用命令替换,即$(grep 'pattern' file).

但是代替:

if [[ grep $check_val1 $log -ne $check_val1 || grep $check_val2 $log -ne $check_val2 ]]; then
Run Code Online (Sandbox Code Playgroud)

你可以使用grep -q:

if grep -q -e "$check_val1" -e "$check_val2" "$log"; then
Run Code Online (Sandbox Code Playgroud)

按照man grep:

-q, --quiet, --silent
         Quiet mode: suppress normal output.  grep will only search a file until a match 
         has been found, making searches potentially less expensive.
Run Code Online (Sandbox Code Playgroud)


小智 8

[[试试测试命令.测试不支持仅通过键入命令来测试命令的退出状态

  • 你会怎么解决它? (2认同)
  • 我来这里寻找;简要说明括号的含义。谢谢。 (2认同)