Shell脚本 - 检查语法

时间:2011-08-22 09:36:17

标签: shell unix

如何在不执行的情况下检查ksh shell脚本中包含的语法的正确性?为了明确我的观点:在perl中我们可以执行命令:

perl -c test_script.pl

检查语法。在ksh中有类似的东西吗?

3 个答案:

答案 0 :(得分:4)

ksh -n

Borne Shell大部分家族都接受-n。 tcsh也是。

答案 1 :(得分:1)

我用以下代码做了一个小测试:

#!/bin/bash
if [ -f "buggyScript.sh" ; then
    echo "found this buggy script"
fi

注意if中的缺失]。现在我进入了

bash -n buggyScript.sh

并且未检测到丢失的情况。

第二个测试脚本如下所示:

#!/bin/bash
if [ -f "buggyScript.sh" ]; then
    echo "found this buggy script"

注意在if结尾处缺少的fi。使用

进行测试
bash -n buggyScript.sh

返回

buggyScript.sh: line 5: syntax error: unexpected end of file

结论: 使用n选项测试脚本会检测到一些错误,但绝不是所有错误。所以我猜你只是在执行脚本时才发现所有错误。

答案 2 :(得分:1)

你说的测试未能检测到语法错误,实际上语法错误并不... echo是一个命令(确定内置,但仍然是一个命令)所以ksh / bash不会检查命令的拼写/语法。 同样地" ["实际上是测试命令的别名,命令期望结束括号"]"作为其语法的一部分,而不是ksh / bash' s。 所以-n做了它在锡上的说法,你只是没有正确读取锡! : - )