包含特殊字符的多条语句使用 if 导致错误

Buv*_*mar 3 shell bash shell-script test

我一直在尝试编写一个脚本来检查是否在特定文件/文件夹中找不到特定内容,然后它应该打印“失败”。否则它应该打印“成功”。但是,以下脚本导致多个错误。

if [[ ( ! grep '/example.com' /opt/nfs &>/dev/null ) || ( ! grep -R '/example.com' /data &>/dev/null) ]]
then
echo "Failed"
else
echo "Passed"
fi
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么它会导致错误,无论如何要消除错误并获得预期的输出?

更新:我收到以下错误:

s.sh: line 1: conditional binary operator expected
s.sh: line 1: expected `)'
s.sh: line 1: syntax error near `'/example.com''
s.sh: line 1: `if [[ ( ! grep '/example.com' /opt/nfs &>/dev/null ) || ( ! grep -R '/example.com' /data &>/dev/null) ]]'
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

[[...]]是用于执行比较和其他类型测试的构造。它是一个ksh命令,其解析遵循特殊的语法规则并替换[标准命令(使用普通的简单命令解析)。

在这里,没有用。这是否grepgrep命令成功要测试(不是[[...]][命令),所以它只是:

if grep -qF /example.com /opt/nfs || grep -RqF /example.com /data
then echo passed
else echo failed
fi
Run Code Online (Sandbox Code Playgroud)

-q 抑制输出并通过在找到一个匹配项后立即退出而不是尝试查找所有匹配项来进行优化。