Die Veröffentlichung der ShellCheck 0.9, einem Projekt zur Entwicklung eines statischen Analyse-Tools für Shell-Skripte, das die Erkennung von Fehlern in Skripten unter Berücksichtigung der Besonderheiten von bash, sh, ksh und dash unterstützt, ist erfolgt. Der Code des Projekts ist in Haskell geschrieben und wird unter der GPLv3-Lizenz verteilt. Es stehen Komponenten für die Integration mit Vim, Emacs, VSCode, Sublime, Atom und verschiedenen integrierten Umgebungen zur Verfügung, die GCC-kompatible Fehlermeldungen unterstützen.

Es werden sowohl die Erkennung von Syntaxfehlern, die während der Ausführung Fehler im Interpreter verursachen, als auch semantische Probleme unterstützt, bei denen die Ausführung nicht unterbrochen wird, aber Anomalien im Verhalten des Skripts auftreten. Der Analyzer kann auch Engpässe, nicht offensichtliche Probleme und Fallstricke identifizieren, die unter bestimmten Umständen zu Fehlern führen können.
Zu den erkannten Fehlerklassen gehören Probleme mit der Escape-Sequenz für Sonderzeichen und der Verwendung von Anführungszeichen, Fehler in Bedingungen, falsche Verwendung von Befehlen, Probleme bei der Zeit- und Datumsverarbeitung sowie typischen Syntaxfehler von Anfängern. Zum Beispiel das Fehlen von Leerzeichen beim Vergleich „[[ $foo==0 ]]“, das Vorhandensein von Leerzeichen „var = 42“ oder die Angabe des Symbols $ bei der Zuweisung „$foo=42“, die Verwendung von Variablen ohne Anführungszeichen „echo $1“, und die Angabe von überflüssigen eckigen Klammern in „tr -cd ‘[a-zA-Z0-9]'“.
Zusätzlich wird die Ausgabe von Empfehlungen zur Verbesserung des Code-Stils, zur Behebung von Portabilitätsproblemen und zur Erhöhung der Zuverlässigkeit von Skripten unterstützt. Beispielsweise wird anstelle von „echo $[1+2]“ empfohlen, die Syntax „$((..))“ zu verwenden, die Konstruktion „rm -rf „$STEAMROOT\/“*“ wird als unsicher gekennzeichnet und könnte das Stammverzeichnis löschen, wenn die Variable $STEAMROOT nicht gesetzt ist, und die Verwendung von „echo {1..10}“ wird als nicht kompatibel mit dash und sh hervorgehoben.
In der neuen Version:
- Eine Warnung für Ausdrücke der Art „local readonly foo“ wurde hinzugefügt.
- Eine Warnung über nicht verfügbare Befehle wurde hinzugefügt.
- Eine Warnung über Rückverweise in „declare x=1 y=$x“ wurde hinzugefügt.
- Eine Warnung wurde hinzugefügt, wenn $? verwendet wird, um den Rückgabecode von echo, printf, [ ], [[ ]] und test auszugeben.
- Eine Empfehlung zum Entfernen von ((..))inarray[((idx))]=val wurde hinzugefügt.
- Eine Empfehlung zur Zusammenführung von doppelten Klammern im arithmetischen Kontext wurde hinzugefügt.
- Eine Empfehlung zum Entfernen von runden Klammern in dem Ausdruck a[(x+1)]=val wurde hinzugefügt.
Quelle: opennet.ru
