Is there a static analysis tool like Lint or Perl::Critic for shell scripts?

自作多情 提交于 2019-11-26 15:23:48

问题


Are there any shell (specifically bash or ksh) checkers that test shell scripts for style, best practices, naming conventions, etc? (Something like Lint for C, or Perl::Critic for Perl.)

I know with ksh you can do syntax checking by running ksh -n script.ksh but I was hoping for something more than just sytax checking - something that parses/analyzes the actual code?

I'm probably out of luck, but I guess it doesn't hurt to ask.


回答1:


The Debian and Ubuntu projects use a script checkbashisms, that looks for particular patterns that might indicate that someone is relying on /bin/sh being bash.

Beyond that, most shells have a -n option to parse and report errors. You could check your script against several different shells to make sure it uses only portable syntax:

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

edit to add: Since writing this answer, shellcheck has been written, as suggested in a later answer. This does a much more thorough job of linting shell scripts than the previous suggestions.




回答2:


I found shellcheck: it tests for common errors in quoting and other things you overlook ("because it works").




回答3:


I wrote shlint to wrap checkbashims and the other basic linting options available to shells presented in Brian's answer.

It's installable via rubygems (gem install shlint) as sort of a gag, really, but you only need perl (for checkbashims) and a POSIX compliant shell to interpret the shlint command itself. Should work out of the box on OSX and Ubuntu.



来源:https://stackoverflow.com/questions/3668665/is-there-a-static-analysis-tool-like-lint-or-perlcritic-for-shell-scripts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!