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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow