⚡ Lehrpfad 2: Scripting & Text-Mining

Bash 08: Robuste Skripte, Strict Mode & Debugging

Härte deine Shell-Skripte für den 24/7-Serverbetrieb mit set -euo pipefail, automatischen Cleanup-Traps und Concurrency-Locks mit flock.

🛡️ 1. Der Bash Strict Mode (set -euo pipefail)

In Produktions-Umgebungen ist "Stiller Weiterlauf bei Fehlern" die häufigste Ursache für Datenverlust. Der Strict Mode stoppt das Skript deterministisch beim ersten Fehler:

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'

# 1. set -e (errexit): Bricht bei unhandled Exit-Codes != 0 sofort ab
# 2. set -u (nounset): Behandelt Zugriffe auf ungesetzte Variablen als Fatal Error
# 3. set -o pipefail: Ein Fehler in foo | bar | baz lässt die gesamte Pipeline scheitern

# Erlaubte Fehler sauber abfangen:
optional_cleanup || true

🧹 2. Signal-Traps, Cleanup & File Locks (flock)

Hinterlasse niemals Datenmüll im Dateisystem und verhindere Race Conditions bei parallel laufenden Cronjobs:

# 🎯 1. EXIT Trap – Garantiertes Aufräumen:
WORK_DIR=$(mktemp -d)
trap 'rm -rf "$WORK_DIR"' EXIT

# 🎯 2. Exklusives Locking gegen Doppel-Ausführung:
exec 200>/var/lock/backup.lock
flock -n 200 || { echo "Job läuft bereits!" >&2; exit 1; }

# 🎯 3. Trace-Debugging im laufenden Betrieb:
set -x  # Zeigt jeden ausgeführten Befehl mit '+' an
grep "root" /etc/passwd
set +x  # Schaltet Tracing wieder aus
🛟 Didaktische Analogie: Sicherheitsnetz & Hotelschlüssel

set -euo pipefail: Das Notbremssystem im Hochgeschwindigkeitszug. Sobald eine Variable wackelt oder ein Zwischenhalt entgleist, stoppt der Zug sofort, statt ungebremst in den Abgrund zu rasen.

flock: Das "Besetzt"-Schild am Hotelzimmer. Kein zweiter Gast kann eintreten, solange die Tür verriegelt ist!

📑 3. Cheat-Sheet: Defensive Bash

Befehl / Option Syntax Schutzwirkung
set -e set -o errexit Sofortiger Abbruch bei Befehlsfehlern
set -u set -o nounset Verhindert Ausführung mit leeren/ungesetzten Variablen
set -o pipefail cmd1 | cmd2 Gibt Fehlercode zurück, falls irgendein Glied der Pipe fehlschlägt
trap '...' EXIT trap cleanup EXIT Führt Aufräumcode bei normalem und abnormalem Beenden aus
flock -n <file> flock -n /tmp/job.lock cmd Non-blocking Concurrency Lock gegen parallele Runs
set -x / set +x set -x; ...; set +x Aktiviert / Deaktiviert interaktiven Befehls-Trace

🎯 Aufgaben & Checkliste in aufgabe.sh

💡 DevOps Pro-Tipp: Unbeabsichtigte rm-Katastrophen verhindern

Ohne set -u führt ein unbedachter Aufruf wie rm -rf /var/app/$ENV_NAME/cache bei leerer Variable zu rm -rf /var/app//cache. Mit set -u bricht die Shell sofort vor dem Löschbefehl ab!

💻 In Web-IDE öffnen → ← Zurück zu Bash 07 🎓 Zum Dashboard & Zertifikate →