是否有一个静态分析工具,如Lint或Perl :: Critic for shell脚本?

时间:2010-09-08 14:19:35

标签: shell static-analysis checkstyle

是否有任何shell(特别是bash或ksh)检查程序可以测试shell脚本的样式,最佳实践,命名约定等? (像Lint for C,或者Perl :: Critic for Perl。)

我知道使用ksh你可以通过运行ksh -n script.ksh来进行语法检查,但我希望的不仅仅是sytax检查 - 解析/分析实际代码的东西吗?

我可能运气不好,但我觉得这样做并没有什么坏处。

3 个答案:

答案 0 :(得分:41)

I found shellcheck:它会测试引用中的常见错误以及您忽略的其他内容("因为它可以正常工作")。

答案 1 :(得分:32)

Debian和Ubuntu项目使用脚本checkbashisms,该脚本查找可能表明有人依赖/bin/shbash的特定模式。

除此之外,大多数shell都有-n选项来解析和报告错误。您可以针对几个不同的shell检查脚本,以确保它只使用可移植的语法:

for shell in zsh ksh bash dash sh
do
  echo "Testing ${shell}"
  ${shell} -n my_script.sh
done

编辑添加:自撰写此回答以来,shellcheck已按照建议in a later answer编写。与以前的建议相比,这比linting shell脚本做得更彻底。

答案 2 :(得分:7)

我写了shlint来包装checkbashims以及Brian回答中提供给shell的其他基本linting选项。

它可以通过rubygems(gem install shlint)安装,实际上是一种插曲,但是你只需要perl(用于checkbashims)和一个符合POSIX的shell来解释shlint命令本身。应该在OSX和Ubuntu上开箱即用。