Bash
Fallstricke
Suche…
Whitespace beim Zuweisen von Variablen
Bei der Zuweisung von Variablen kommt es auf Whitespace an.
foo = 'bar' # incorrect foo= 'bar' # incorrect foo='bar' # correct
Die ersten beiden führen zu Syntaxfehlern (oder schlechterem Ausführen eines falschen Befehls). Im letzten Beispiel wird die Variable $foo
korrekt auf den Text "Balken" gesetzt.
Die letzte Zeile in einer Datei fehlt
Der C-Standard besagt, dass Dateien mit einer neuen Zeile enden sollen. Wenn also EOF am Ende einer Zeile steht, wird diese Zeile möglicherweise von einigen Befehlen nicht übersehen. Als Beispiel:
$ echo 'one\ntwo\nthree\c' > file.txt $ cat file.txt one two three $ while read line ; do echo "line $line" ; done < file.txt one two
Um sicherzustellen, dass dies im obigen Beispiel richtig funktioniert, fügen Sie einen Test hinzu, damit die Schleife fortgesetzt wird, wenn die letzte Zeile nicht leer ist.
$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt one two three
Fehlgeschlagene Befehle stoppen die Skriptausführung nicht
Wenn ein Funktionsaufruf in den meisten Skriptsprachen fehlschlägt, wird möglicherweise eine Ausnahme ausgelöst und die Ausführung des Programms gestoppt. Bash-Befehle haben keine Ausnahmen, aber sie haben Exit-Codes. Ein Exit-Code ungleich Null signalisiert einen Fehler, jedoch beendet ein Exit-Code ungleich Null die Ausführung des Programms nicht.
Dies kann zu gefährlichen (wenn auch zugegebenermaßen erfundenen) Situationen führen:
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
Wenn cd
-ing für dieses Verzeichnis fehlschlägt, ignoriert Bash den Fehler und wechselt zum nächsten Befehl. Dabei wird das Verzeichnis, in dem Sie das Skript ausgeführt haben, gelöscht.
Der beste Weg, um mit diesem Problem umzugehen, ist die Verwendung des Befehls set :
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
set -e
weist Bash an, das Skript sofort zu beenden, wenn ein Befehl einen Status ungleich Null zurückgibt.