Bash Scripting: Variables & Control Flow (Artikel 241)
Grundlagen der Bash-Programmierung für Systemadministratoren. Erfahren Sie den sicheren Umgang mit Variablen, logischen Operatoren und Kontrollstrukturen für die tägliche Automatisierung.
# Bash Scripting: Das Fundament der Automatisierung
TL;DR / Management Summary Jede komplexe Automatisierung unter Linux beginnt mit einem Bash-Skript. Wer Variablen sicher nutzt, logische Operatoren versteht und Kontrollstrukturen (
if,for,while) beherrscht, verwandelt manuelle, fehleranfällige Aufgaben in präzise Werkzeuge. In diesem Modul lernen wir die Bausteine der Bash-Programmierung kennen – mit Fokus auf sauberem Code und Fehlervermeidung.
# 1. Einführung & Architektur
Die Shell als Programmiersprache.
Bash ist kein Compiler, sondern ein Interpreter. Das Skript wird Zeile für Zeile gelesen und ausgeführt.
# Der Skript-Fluss (Mermaid)
graph TD
A[Shebang: #!/bin/bash] --> B[Initialization: Variables]
B --> C{Logic Check: if/then}
C -->|True| D[Action A]
C -->|False| E[Action B]
D/E --> F[Iteration: for/while loops]
F --> G[Exit Code: 0 or 1]
# 2. Variablen und Datentypen
Werte speichern.
In Bash gibt es keine harten Datentypen. Alles wird als String behandelt, kann aber numerisch ausgewertet werden.
# Zuweisung und Abruf
NAME="Server01"
MEMORY_GB=16
# WICHTIG: Quotes nutzen um Leerzeichen-Fehler zu vermeiden
echo "Starting update on ${NAME}..."
# 3. Logische Operatoren
Entscheidungen treffen.
Nutzen Sie immer die moderne Syntax [[ ]] für Vergleiche.
# Zahlenvergleich
-eq: Equal (Gleich)-ne: Not Equal (Ungleich)-lt: Less Than (Kleiner als)-gt: Greater Than (Größer als)
# Stringvergleich
==: Gleich!=: Ungleich-z: String ist leer
if [[ $MEMORY_GB -gt 8 ]]; then
echo "High memory system detected."
fi
# 4. Kontrollstrukturen
Den Ablauf steuern.
# For-Loops (Listen abarbeiten)
SERVERS=("web01" "web02" "db01")
for S in "${SERVERS[@]}"; do
ssh "$S" "uptime"
done
# While-Loops (Warten auf Bedingung)
# Warte bis Port 80 erreichbar ist
while ! nc -z localhost 80; do
echo "Waiting for Nginx..."
sleep 1
done
# 5. Troubleshooting & “War Stories”
Bugs in der Logik.
# Story 1: “Die verschwundene Null”
Symptom: Ein Skript vergleicht [[ $VAR -eq 0 ]], bricht aber mit einem Fehler ab, wenn $VAR leer ist.
Ursache: Bash ersetzt die Variable vor der Ausführung. [[ -eq 0 ]] ist ungültige Syntax.
Lösung: Nutzen Sie Standardwerte: [[ ${VAR:-0} -eq 0 ]]. Wenn $VAR leer ist, wird 0 eingesetzt.
# Story 2: “Global vs. Local”
Symptom: Eine Variable ändert plötzlich ihren Wert, obwohl sie in einer Funktion gar nicht angefasst wurde.
Ursache: Variablen sind in Bash standardmäßig global. Wenn zwei Funktionen den Namen i nutzen, überschreiben sie sich gegenseitig.
Lösung: Nutzen Sie immer das Schlüsselwort local innerhalb von Funktionen: local i=0.
# 6. Fazit & Empfehlung
- Zitate: Setzen Sie Variablen immer in doppelte Anführungszeichen:
"$VAR". - Lesbarkeit: Nutzen Sie Einrückungen (2 oder 4 Leerzeichen). Ein unlesbares Skript wird nicht gewartet.
- Safety: Starten Sie jedes Skript mit
set -euo pipefail(siehe Artikel 049).
# Anhang: Cheatsheet
| Aufgabe | Syntax |
|---|---|
| Variable setzen | VAR="Value" |
| Variable lesen | ${VAR} |
| Befehlsergebnis | RESULT=$(ls) |
| Wenn / Dann | if [[ condition ]]; then ... fi |
| Fallunterscheidung | case $VAR in ... esac |
| Arithmetik | (( SUM = 1 + 1 )) |
| Argumente | $1, $2, $@ (Erster, zweiter, alle) |
| Rückgabewert | $? (0 = Erfolg) |