BrianH
BrianH

Reputation: 8241

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

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.

Upvotes: 48

Views: 11455

Answers (3)

Brian Campbell
Brian Campbell

Reputation: 332886

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.

Upvotes: 35

u0b34a0f6ae
u0b34a0f6ae

Reputation: 49813

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

Upvotes: 46

Ross Duggan
Ross Duggan

Reputation: 463

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.

Upvotes: 9

Related Questions