如何在不执行的情况下检查ksh shell脚本中包含的语法的正确性?为了明确我的观点:在perl中我们可以执行命令:
perl -c test_script.pl
检查语法。在ksh中有类似的东西吗?
答案 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做了它在锡上的说法,你只是没有正确读取锡! : - )