🎯 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
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
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.