⚡ Lehrpfad 2: Scripting & Text-Mining

Bash 05: Kontrollfluss, Test-Operatoren & Regex-Matching

Treffe präzise Entscheidungen mit doppelten Klammern [[ ... ]], validiere IP-Adressen mit regulären Ausdrücken und steuere Abläufe mit case.

🎯 1. Moderne Test-Konstrukte ([[ ... ]] vs. (( ... )))

Verwende für Strings und Dateiprüfungen stets [[ ... ]] und für reine Zahlenvergleiche die arithmetische Umgebung (( ... )):

# Dateiprüfungen:
if [[ -f "/etc/nginx/nginx.conf" && -r "/etc/nginx/nginx.conf" ]]; then
  echo "Konfiguration existiert und ist lesbar."
fi

# String-Prüfungen:
if [[ -z "$API_KEY" ]]; then
  echo "FEHLER: Kein API_KEY gesetzt!" >&2
  exit 1
fi

# Arithmetische Zahlenvergleiche:
if (( CPU_USAGE >= 90 || RAM_USAGE >= 90 )); then
  echo "ALARM: Server-Ressourcen kritisch!"
fi

🧩 2. Regex-Matching (=~) & case-Verzweigung

Mit dem Bash-Operator =~ kannst du Strings direkt gegen reguläre Ausdrücke prüfen und Treffergruppen aus BASH_REMATCH extrahieren:

# 🎯 1. Regex-Matching & Subgruppen:
IP="10.0.4.1"
if [[ $IP =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
  echo "Erstes Oktett: ${BASH_REMATCH[1]}"
fi

# 🎯 2. Übersichtliche Befehls-Dispatcher mit case:
case "$ACTION" in
  start|boot)
    systemctl start "$SERVICE" ;;
  stop|down)
    systemctl stop "$SERVICE" ;;
  restart|reload)
    systemctl restart "$SERVICE" ;;
  *)
    echo "Ungültige Option: $ACTION" >&2
    exit 2 ;;
esac
🚦 Didaktische Analogie: Zollkontrolle am Server-Gateway

Die Testoperatoren: [[ -f ]] und [[ -x ]] sind wie der Sicherheitsdienst am Flughafentor – sie prüfen Pass (Existenz) und Visum (Ausführungsrecht). =~ ist der biometrische Scanner, der das genaue Muster der Ausweisnummer abgleicht!

📑 3. Cheat-Sheet: Testoperatoren

Operator Syntax Bedeutung
-f / -d / -e [[ -f "$path" ]] Reguläre Datei / Verzeichnis / Existiert
-x / -r / -w [[ -x "$script" ]] Ausführbar / Lesbar / Schreibbar
-z / -n [[ -z "$str" ]] String ist leer (Länge 0) / String nicht leer
=~ [[ "$val" =~ ^[0-9]+$ ]] Regulärer Ausdruck (Speichert Gruppen in BASH_REMATCH)
(( a >= b )) (( cpu >= 90 )) Schneller C-Style Zahlenvergleich
$? if [[ $? -eq 0 ]]; then Exit-Code des unmittelbar zuvor ausgeführten Befehls

🎯 Aufgaben & Checkliste in aufgabe.sh

💡 Defensive Bash: Keine einfachen Klammern [ ... ]

Vermeide das alte POSIX [ "$a" = "$b" ], da nicht gesetzte Variablen zu Syntax-Fehlern (unary operator expected) führen. In [[ ... ]] ist Bash robuster gegen leere Variablen.

💻 In Web-IDE öffnen → ← Zurück zu Bash 04 Weiter zu Bash 06 →