Is there a static analysis tool like Lint or Perl::Critic for shell scripts?
Solution 1:
I found shellcheck: it tests for common errors in quoting and other things you overlook ("because it works").
Solution 2:
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.