是否有像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/shbash

除此之外,大多数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 shlintgem install shlint ,实际上,但你只需要perl(对于checkbashims)和一个符合POSIX的shell来解释shlint命令本身。 应该在OSX和Ubuntu上开箱即用。