Das Standardverhalten in shell scripts ist -anders als in jeder normaler Programmiersprache-, dass bei Fehlern einfach weitergemacht wird.
Und das kann natürlich üble Auswirkungen haben, wenn man später in einem shell script auf Eingaben von früherer Stelle angewiesen ist und diese nicht korrekt verarbeitet werden konnten.
Zum Glück kann man als Option auch in der Shell setzen, dass bei einem Fehler sofort das Script abgebrochen- und nicht einfach weiter gemacht wird.
Dies erreicht man mit der Option:
set -e
set -o pipefail
Die erste Option bewirkt, dass bei einem Fehler das Script abgebrochen wird und die zweite, dass dies auch bei pipes (|) gilt, wie z.B.:grep db_host /tmp/nicht-existente-datei.cfg | mysql
Zusätzlich kann man noch die Option -u
setzen, was bewirkt, dass alle Variablen vor der Verwendung deklariert werden müssen.
So kann man beispielsweise zuverlässig Tippfehler in Variablennamen auffangen.
Diese Optionen lassen sich auch zusammenfassen mit:
set -euo pipefail
Und diese Zeile sollte zuoberst (bzw. gleich unter dem „shebang“ z.B. #!/bin/bash
bei jedem Script stehen.
One thought on “Fehlerbehandlung in Shell Scripts”