是否有像Lint或Perl :: Critic的静态分析工具的shell脚本?
是否有任何shell(特别是bash或ksh)检查器testing风格,最佳实践,命名约定等shell脚本? (像Lint for C,或Perl :: Critic for Perl。)
我知道ksh你可以通过运行ksh -n script.ksh
来进行语法检查,但是我希望得到的不仅仅是sytax检查 – parsing/分析实际代码的东西?
我可能运气不好,但我想这不会问。
Debian和Ubuntu项目使用脚本checkbashisms
,查找特定的模式,可能表明有人依靠/bin/sh
是bash
。
除此之外,大多数shell都有一个-n
选项来parsing和报告错误。 你可以检查你的脚本对几个不同的shell,以确保它只使用便携式语法:
for shell in zsh ksh bash dash sh do echo "Testing ${shell}" ${shell} -n my_script.sh done
编辑添加 :自写这个答案, shellcheck已被写入,如后面的答案build议。 这比之前的build议做得更彻底。
我发现shellcheck :它testing引用中的常见错误和其他你忽略的东西(“因为它工作”)。
我写了shlint来包装checkbashims以及在Brian的答案中提供给shell的其他基本linding选项。
它可以通过rubygems( gem install shlint
) gem install shlint
,实际上,但你只需要perl(对于checkbashims)和一个符合POSIX的shell来解释shlint命令本身。 应该在OSX和Ubuntu上开箱即用。