当Bash有一个表达式错误时如何退出,如[:-ne:一元运算符预期

时间:2015-12-23 18:14:32

标签: bash error-handling

我的经验是使用更近期(体面)的语言。我习惯于尝试/捕捉。

我的客户有义务使用Bash。

我有一个脚本会做一些非常危险的事情,但是脚本的第一部分是关于在我们运行风险程序之前验证所有内容是否符合预期。在验证阶段,我希望如果出现任何问题,它会马上退出。

所以我用:

create unique index unq_table_filtered_IX
    on table(columns) where condition;

但是,脚本在生成错误之后仍然会继续:

set -e -u -o pipefail
set -o errtrace

它继续执行脚本,即使验证失败也会启动危险程序!

如何在执行时检测Bash中的那种错误?

1 个答案:

答案 0 :(得分:3)

首先,您需要知道[ ... ]是一个命令而不是语法元素。它是test命令的变体。 [是命令,... ]是传递给它的参数。 ]应该是最后一个参数。

问题是传递给[的参数是由[而不是bash解析的,if语法元素不会在执行的非零返回值上抛出错误以它的本性来测试。

解决方法是使用[[(扩展测试)。 Bash将检查传递给[[

的参数的语法

进一步阅读:http://tldp.org/LDP/abs/html/testconstructs.html