如何在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只能找到预期的逻辑故障,所以这不是替代方案。
答案 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上执行的,基于运行时值的嵌套参数扩展或扩展,一些基于内置命令的参数,以及运行时发现的其他错误。