在bash的`if [ .. ]`语句中检查命令的成功情况。

27 浏览
0 Comments

在bash的`if [ .. ]`语句中检查命令的成功情况。

我正在尝试自动化我们的应用备份。其中一部分过程是在一个if语句中检查egrep的退出状态:\n

if [ ! -f /opt/apps/SiteScope_backup/sitescope_configuration.zip ] ||
   [ egrep -i -q "error|warning|fatal|missing|critical" "$File" ]
then 
  echo "testing"
fi

\n我期望它输出testing,因为文件存在且egrep返回成功,但实际上我得到了一个错误:\n

-bash: [: 参数太多

\n我尝试了各种语法 - 添加括号、引号等,但错误仍然存在。\n请帮助我理解我做错了什么。

0
0 Comments

从上面的内容中可以得出,问题的原因是因为将`[`符号误认为是`if`语句的一部分。实际上,`if`语句的语法是简单的:

if command; then
    : # ... 当command的结果代码为0时应该发生的事情
else
    : # ... 其他情况下应该发生的事情
fi

该问题的解决方法是使用正确的语法来编写`if`语句,并确保`[`命令的使用正确。此外,还可以使用其他替代方案,如Bash中的`[[`双方括号,以及POSIX中更加稳定的`test`命令。

另外,还有一些相关的问题和讨论可以参考,如为什么在其他编程语言中0被视为假(而其他数字为真),以及为什么测试命令的成功与否是一种反模式等。

0