Unter ShellCheck.net habe ich ein Tool gefunden, mit dem man schnell und einfach eine statische Analyse für Shell-Skripte durchführen kann. Einfach den Script Code auf der Seite in das Eingabefeld kopieren und schon werden die Schwächen des Shell Scripts aufgezeigt.
Die Statische Code-Analyse ist ein Software-Testverfahren, das vor oder während der Compilierung durchgeführt wird. Der Quelltext wird hierbei einer Reihe formaler Prüfungen unterzogen, bei denen bestimmte Sorten von Fehlern entdeckt werden können, noch bevor das Shell Script ausgeführt wird.
Bei der Prüfung einiger meiner Shell Scripte hat mit ShellCheck.net hat mir das Tool eine Reihe von Verbesserungen vorgeschlagen und ich konnte einige meiner Skripte noch mal optimieren. Vor allem die kleinen „Was wäre wenn?“ werden von dem Open Source Tool optisch sehr ansprechend aufbereitet und geben Tipps und Hinweise für Schwächen und mögliche Verbesserungen.
Shellcheck steht unter der GNU AFFERO GENERAL PUBLIC LICENSE und kann unter https://github.com/koalaman/shellcheck heruntergeladen werden. Allerdings lohnt sich die Installation nur, wenn man nicht einfach das online Formular nutzen kann. Z.B. wenn man sein Shell Script nicht kreuz und quer durch das Internet schieben möchte oder wenn man die statische Codeanalyse für die Shell-Skripte z.B. automatisch in ein Jenkins CI/Hudson Prozess einfügen möchte.
Neben dem ShellChecker gibt es auch noch eine Vielzahl von statischen Code-Anaylse Tools für diverse andere Programmiersprachen. Auf diesem Gebiet sind neben Lint auch Checkstyle, FindBugs und PMD für Java oder Cppcheck für C++, Splint für C oder FxCop bzw. StyleCop für C# zu nennen. Alle diese statischen Code-Anaylse Tools können auch in die Entwicklungsumgebung bzw. in den Build Server integriert werden. Einige Werkzeuge können den Code auch auf sicherheitsrelevante Programmierfehler wie zum Beispiel Pufferüberläufe oder Wettlaufsituationen prüfen, dies ist bei ShellCheck.net aber nicht der Fall.
Fazit:
ShellCheck.net wird auf jeden Fall einen festen Platz in meiner Shell-Script Toolbox bekommen und ich werde nun bei jedem neuen Script und bei Änderungen an meinen vorhandenen Scripten immer vor der Inbetriebnahme einen ShellCheck laufen lassen.