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.
SonarQube. SonarQube is the popular static analysis tool for continuously inspecting the code quality and security of your codebases and guiding development teams during code reviews. SonarQube is used for automated code review with CI/CD Integration.
The static analysis process is relatively simple, as long as it's automated. Generally, static analysis occurs before software testing in early development. In the DevOps development practice, it will occur in the create phases. Once the code is written, a static code analyzer should be run to look over the code.
Static analysis identifies defects before you run a program (e.g., between coding and unit testing). Dynamic code analysis identifies defects after you run a program (e.g., during unit testing). However, some coding errors might not surface during unit testing.
I found shellcheck: it tests for common errors in quoting and other things you overlook ("because it works").
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With