如何在不运行脚本的情况下检查bash脚本?

时间:2013-08-12 08:40:56

标签: bash

如何在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只能找到预期的逻辑故障,所以这不是替代方案。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

#!/bin/bash

function A {
    ...
}

function B {
    ...
}

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

# main "$@"

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