Robustes Bash-Grundgerüst mit set -euo pipefail
Ein Shell-Skript, das bei Fehlern einfach weiterläuft, ist gefährlich. Mit set -euo pipefail und einem sauberen Grundgerüst bricht dein Skript beim ersten Problem sicher ab.
Standardmäßig macht Bash bei einem Fehler einfach weiter. Für ein Deploy- oder Backup-Skript ist das riskant: Ein fehlgeschlagener Schritt bleibt unbemerkt, und der nächste läuft auf halbfertigem Zustand. Deshalb beginnt bei mir jedes ernsthafte Skript mit derselben Kopfzeile.
Das Grundgerüst
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
# -e : bricht ab, sobald ein Befehl fehlschlägt
# -u : bricht ab, wenn eine nicht gesetzte Variable benutzt wird
# -o pipefail : eine Pipe schlägt fehl, wenn IRGENDEIN Teil fehlschlägt
main() {
local ziel="${1:-}"
if [[ -z "$ziel" ]]; then
echo "Verwendung: $0 <ziel>" >&2
exit 1
fi
echo "Verarbeite: $ziel"
# ... deine Logik ...
}
main "$@"Warum jedes Flag zählt
-estoppt das Skript beim ersten fehlgeschlagenen Befehl, statt blind weiterzulaufen.-udeckt Tippfehler in Variablennamen auf:$zeilstatt$zielbricht sofort ab, statt still ins Leere zu greifen.-o pipefailsorgt dafür, dasscat datei | grep musterauch dann fehlschlägt, wenn schoncatscheitert – ohne dieses Flag zählt nur der letzte Befehl der Pipe.
Das IFS=$'\n\t' entfernt das Leerzeichen aus dem Feldtrenner, damit Dateinamen mit Leerzeichen nicht unbeabsichtigt zerteilt werden.
Aufräumen mit trap
Wenn dein Skript temporäre Dateien anlegt, räumst du sie mit trap auch dann auf, wenn es abbricht:
tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXITKleiner Hinweis: set -e hat ein paar Sonderfälle (etwa in if-Bedingungen), aber als Grundgerüst macht diese Kopfzeile deine Skripte sofort deutlich sicherer.
Mit solchen kleinen Deploy- und Automatisierungsskripten halte ich die Websites meiner Kundinnen und Kunden am Laufen. Wenn du Unterstützung bei App, Website oder Automatisierung brauchst, findest du mich auf bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
429 bei KI-APIs richtig behandeln – Retry mit Exponential Backoff (Bash)
Jede KI-API (Claude, OpenAI, Gemini) drosselt mit HTTP 429, wenn du zu schnell anfragst. Wer sofort stur weiterhämmert, wird noch länger blockiert. So respektierst du den Retry-After-Header und wartest exponentiell.
Dateien sicher zum Download ausliefern in PHP – mit readfile() und den richtigen Headern
Ein Download-Link auf eine private Datei ist schnell gefährlich – Pfad-Tricks führen sonst zu fremden Dateien. So lieferst du Downloads sauber aus: geschützt vor „../", speicherschonend und mit korrektem Dateinamen.
Ranglisten in SQL mit Fensterfunktionen – ROW_NUMBER, RANK und PARTITION BY
Für eine Rangliste brauchst du keine Zählerei im Code. ROW_NUMBER() und RANK() vergeben den Platz direkt in SQL – auch getrennt nach Gruppen. Ich zeige dir den Unterschied und wann du was nimmst.