GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Granatenschock? Nein, ShellCheck! Finden Sie Fehler in Ihren Skripten.

Gute Drehbücher zu schreiben ist schwierig. Es gibt natürlich die offensichtliche PEBKAC-Fähigkeit, aber auch alte Magie und Geschichte, mit alten Konventionen, die zu Plan 9 und FLOW-MATIC gehören, was die meisten Leute nicht wirklich verstehen oder sich nicht darum kümmern, wenn sie ihre Software schreiben. Dann bedeutet das Fehlen von Dostojewskis Verbrechen und Bestrafung in der Softwareentwicklung auch, dass Codes faul sein und schreiben können, wie sie wollen.

Vor ein paar Monden bin ich auf ein nettes kleines Programm gestoßen, das entwickelt wurde, um Ihr Shell-Skript weniger nervtötend zu machen. Es heißt ShellCheck, ist als Online-Konsole verfügbar und Sie können es auch in so ziemlich jeder Distribution installieren und dann in Ihre Workflows oder so weiter integrieren. Fasziniert machte ich mich auf die Suche.

Feuer im Loch

Ich begann mit meinem eigenen Shell-Skript - simWANsim, einem Programm, das entwickelt wurde, um die WAN-Netzwerklatenz auf einfache und bequeme Weise zu simulieren (keine Notwendigkeit für mehrere Schnittstellen, Live-Medien oder ähnliches). Dies ist im Wesentlichen ein BASH-Skript, und ich wollte sehen, wie effizient und elegant es ist. Übrigens muss das Skript nicht ausführbar sein, um ausgewertet zu werden.

Shellcheck "Skriptname"

Ich war überrascht von der Menge an Fehlern und Warnungen, aber als ich dann zu lesen begann, waren viele davon tatsächlich mehrere Instanzen derselben Art von schlechter Programmierpraxis, die mehrmals im Skript wiederholt wurden. Außerdem wurde mir klar, dass die Fehler sinnvoll waren, dass sie klar geschrieben waren und dass es sich nicht nur um zufälliges Technogeschwätz handelte. Praktische, nützliche Vorschläge – mit Beispielen – zum Korrigieren Ihrer Skripte.

Einer der häufigsten Fehler war die Verwendung von Backticks anstelle der Notation $(). Ich hatte auch mehrere andere Zeilen in der gleichen Richtung, die Verwendung von let expr, das Fehlen von doppelten Anführungszeichen, um Globbing und Worttrennung zu verhindern, und ein paar andere kleinere Probleme wie diese.

In simWANsim.sh, Zeile 152:
EGREP=`what egrep`
^-----------^ SC2006:Verwenden Sie die $(...)-Notation anstelle des alten Backticked `. ..`.
^---^ SC2230:das ist kein Standard. Verwenden Sie stattdessen den eingebauten 'Befehl -v'.

Meinten Sie:
EGREP=$(what egrep)

In simWANsim.sh Zeile 304:
let PRNT=$PRNT+1
^--------------^ SC2219:Statt 'let expr' lieber (( Ausdruck )) .

Ich war beeindruckt von der Fallstudie [sic]. Hallo hallo. Ich hatte Optionen verwendet, die ich nicht wirklich gehandhabt habe, und ich hatte auch keinen allgemeinen Fall für nicht spezifizierte Flags. Sieht aus wie ein kluger kleiner Vorschlag. Sehr schlau.

In simWANsim.sh Zeile 178:
case $flag in
^-- SC2213:getopts spezifizierte -a, aber es wird nicht von diesem 'case' gehandhabt.
^-- SC2213:getopts spezifizierte -s, aber es wird nicht von diesem 'Fall' gehandhabt.
^-- SC2220:Ungültige Flags werden nicht behandelt. Fügen Sie einen *)-Fall hinzu.

Keines davon ist kardinal, aber warum nicht. Wenn Sie Ihren Code so sauber und elegant wie möglich gestalten können, eliminieren Sie schließlich die Möglichkeit von Eckfehlern und seltsamem Verhalten. Ich schreibe nicht gerne Code, aber wenn Sie es tun, können Sie es genauso gut richtig machen.

Ich habe auch ein sehr generisches Skript getestet, um zu sehen, was passiert, wenn keine Fehler vorhanden sind. Das Befehlszeilentool wird einfach ohne Ausgabe beendet. Wenn Sie das Online-Tool verwenden, erhalten Sie eine gedruckte Nachricht mit folgendem Inhalt:

$ shellcheck myscript
Keine Probleme erkannt!

Schließlich können Sie Ihre Ausgabe verschönern, die Ausgabeausführlichkeit, den Formatstil und die Farben ändern, ShellCheck zwingen, mit einem bestimmten Shell-Dialekt zu arbeiten (einschließlich sh, bash, dash und ksh), Wiki-Links anzeigen, was für diejenigen nützlich sein kann, die suchen für zusätzliche Informationen und Ressourcen zu ihren Codierungspraktiken und Fehlern sowie einige andere Optionen. Alles in allem ist es einfach, effektiv und elegant.

Schlussfolgerung

ShellCheck ist ein wirklich cooles Dienstprogramm. Normalerweise interessieren mich Dinge dieser Art nicht besonders, aber ich kann Schönheit schätzen, wenn es welche gibt. Das Tool selbst wurde in Haskell geschrieben, was uns alle auf eine völlig andere metaphysische Ebene versetzt, aber wir werden es dem Autor nicht vorwerfen.

Wenn Sie Shell-Skripte in Ihrer Umgebung verwenden, sollten Sie ShellCheck ausprobieren. Ich denke, Sie werden überrascht sein, denn es sollte Tonnen von kleinen, veralteten Fehlern in Ihrem Code geben, da die Leute selten zurückgehen und alte Dinge reparieren, und Sie am Ende mit Überbleibseln enden, die keinen Sinn mehr machen oder keinem Zweck mehr dienen. Im Zeitalter unnötiger Blähungen zählt Sparsamkeit und Eleganz. Dies ist eine clevere Art, Ihre Muscheldiät zu beginnen. Und damit endet ein weiterer Artikel.


Linux
  1. So verwenden Sie Eingaben in Ihren Shell-Skripten

  2. Setuid für Shell-Skripte zulassen?

  3. Passwort in Shell-Skripten verstecken?

  4. Speichern Sie das Ergebnis von Find als Variable in einem Shell-Skript?

  5. Was sind Shell-Skripte? Wie erstelle ich Shell-Skripte?

So erstellen Sie Shell-Skripte

ShellCheck – Ein kostenloses Dienstprogramm zum Auffinden von Fehlern in Ihren Shell-Skripten

Bash-Anfängerserie Nr. 1:Erstellen Sie Ihr erstes Bash-Shell-Skript und führen Sie es aus

Arrays in Shell-Skripten

Shell/Bash-Skript zum Finden von Primzahlen in Linux

Finden Sie mithilfe des Shell-Skripts heraus, ob die Datei in HDFS vorhanden ist oder nicht