1

如何检查 bash 脚本中的错误(可能还有警告)?

我想在将 bash 脚本检入 git 存储库之前对其进行预检。

我知道我可以使用bash -n script.sh第一个简单的检查,但这找不到例如重写只读字符串之类的东西。

readonly unique_id = "42"
unique_id = "21"

可以,bash -n script.sh但执行时当然会失败。

编辑:以下脚本

#!/bin/bash
# check.sh
readonly unique_id="42"
unique_id="21"

0如果您执行,则给出,bash -n check.sh; echo $?但执行本身会导致错误消息./check.sh: line 4: unique_id: readonly variable

这两种行为都是正确的,因为这不是语法错误,但它仍然会中断执行(即使在单元测试中),我问是否有另一种预检查方式来过滤掉此类错误。

Unittest 只会发现预期的逻辑故障,因此这不是替代方法。

4

2 回答 2

0

另一种方法是将所有代码放在函数中。这样你就可以在调用主函数之前运行你的代码并检查语法错误:

#!/bin/bash

function A {
    ...
}

function B {
    ...
}

function main {
    # most of your codes here
    ...
}

# main "$@"

如果未发现语法错误,请取消注释最后一行。当然,还有一些例外情况,例如在 eval 上执行的那些、嵌套参数扩展或基于运行时值的扩展,有些是基于内置命令的参数,以及在运行时发现的其他错误。

于 2013-08-12T09:46:13.193 回答
0

我假设您考虑只运行该脚本来检查错误?然后,如果您不会对 执行一些“错误”消息stdout,您还可以检查 bash: 中的最后退出状态代码$?。( http://blog.yimingliu.com/2009/01/01/check-last-exit-status-code-in-bash-shell/ )

于 2013-08-12T08:51:54.303 回答