Shellcheck - Bash-Scripts statisch analysieren

Shellcheck findet Fehler in Bash-Scripts die man selbst leicht übersieht.
Falsch gesetzte Anführungszeichen, unportable Syntax, häufige Fallstricke — alles wird markiert.

Installation

sudo apt-get install shellcheck

Verwendung

shellcheck mein-script.sh

Beispiel-Ausgabe

In mein-script.sh line 5:
for file in $(ls /var/log/*.log); do
            ^-- SC2045: Iterating over ls output is fragile.
                        Use globs.

In mein-script.sh line 8:
if [ $name = "test" ]; then
    ^-- SC2086: Double quote to prevent globbing and word splitting.

Jeder Hinweis hat eine SC-Nummer die man auf shellcheck.net nachschlagen kann um die Erklärung zu lesen.

Online ohne Installation

https://www.shellcheck.net

Script einfügen und direkt analysieren.

In Editor integrieren

Für VS Code gibt es eine Shellcheck-Extension die beim Schreiben sofort Hinweise zeigt.
Für Vim/Neovim über ALE oder ähnliche Linting-Plugins.

Als Git Hook

#!/bin/bash
# .git/hooks/pre-commit

for file in $(git diff --cached --name-only | grep '\.sh$'); do
    shellcheck "$file"
    if [ $? -ne 0 ]; then
        echo "Shellcheck-Fehler in $file"
        exit 1
    fi
done

Hinweise deaktivieren

Wenn man bewusst von einer Empfehlung abweicht.

# shellcheck disable=SC2086
echo $variable_ohne_quotes

Shellcheck ist eines der wenigen Tools die ich auf jedem System installiere wo ich Scripts schreibe.