Bash-Skripte sind ein wesentlicher Baustein der Linux-Systemadministration. Sie automatisieren wiederkehrende Aufgaben, verarbeiten Benutzereingaben und steuern Abläufe über Bedingungen. Diese Lektion vertieft praxisrelevante Techniken wie Exit Codes, Arrays, for-Schleifen sowie Eingabevalidierung mit regulären Ausdrücken, um aus Einzelbefehlen robuste Skripte zu formen.
Die Bausteine solider Shell-Skripte
Exit Codes als Steuerungsinstrument
Jeder Linux-Befehl liefert einen Exit Code zurück: 0 signalisiert Erfolg, ein ungleich 0 Wert einen Fehler. In Skripten werden diese Codes ausgewertet, um Pfade für Erfolg oder Fehlerfall zu verzweigen.
#!/bin/bash
# Einfaches Begrüßungsskript für einen Benutzer
# -- Prüft die Argumentanzahl und reagiert entsprechend
if [ $# -eq 1 ]; then
# $#: Anzahl der übergebenen Argumente
username=$1
echo "Hello $username!"
exit 0 # Erfolg signalisieren
else
echo "Please enter only one argument."
exit 1 # Fehler signalisieren
fi
Hinweis: Der Exit Code des zuletzt ausgeführten Befehls steht in der Spezialvariablen $? und ist beim Debugging äußerst hilfreich.
Mehrere Argumente verarbeiten
Mit $@ (oder $*) stehen alle übergebenen Argumente als Liste bereit. In einer for-Schleife lässt sich jedes Argument separat behandeln.
#!/bin/bash
# Begrüßung mehrerer Benutzer
# -- Iteriert über alle Argumente und begrüßt jeden Namen einzeln
if [ $# -eq 0 ]; then
echo "Please enter at least one user to greet."
exit 1
else
for username in $@; do
# $@: alle übergebenen Argumente (getrennt nach Leerzeichen)
echo "Hello $username!"
done
exit 0
fi
Ausgabe elegant in einer Zeile
Mit echo -n wird der automatische Zeilenumbruch unterdrückt; shift entfernt das erste Argument aus der Liste. So entsteht eine kompakte, menschenlesbare Ausgabe.
#!/bin/bash
# Begrüßung in einer einzigen Zeile
# -- Erstes Argument direkt ausgeben, restliche Namen mit Komma anhängen
if [ $# -eq 0 ]; then
echo "Please enter at least one user to greet."
exit 1
else
echo -n "Hello $1" # -n: keinen Zeilenumbruch setzen
shift # Erstes Argument entfernen; $@ enthält nun den Rest
for username in $@; do
echo -n ", and $username"
done
echo "!"
exit 0
fi
Eingaben mit regulären Ausdrücken prüfen
Zur Validierung von Eingaben (z. B. nur Buchstaben zulassen) eignet sich grep mit einem passenden regulären Ausdruck. Die Ausgabe von grep wird nach /dev/null umgeleitet, es zählt nur der Exit Code.
#!/bin/bash
# Begrüßung nur für gültige Namen (A–Z, a–z)
if [ $# -eq 0 ]; then
echo "Please enter at least one user to greet."
exit 1
else
for username in $@; do
# ^ und $: Zeilenanfang/-ende
# [A-Za-z]*: Null oder mehr Buchstaben (nur A–Z, a–z)
echo "$username" | grep "^[A-Za-z]*$" > /dev/null
if [ $? -eq 1 ]; then
echo "ERROR: Names must only contain letters."
exit 2 # Abweichender Exit Code für Validierungsfehler
else
echo "Hello $username!"
fi
done
exit 0
fi
Praxisübungen
1) Zahlen-Filter: Skript schreiben, das beliebig viele Argumente entgegennimmt und nur Werte > 10 ausgibt.
2) Fehlerklassen: Unterschiedliche Exit Codes für „keine Argumente“, „ungültige Zeichen“ und „technischer Fehler“ vergeben.
3) Dateilisten: Arrays nutzen, um eine Liste von Pfaden zu iterieren und pro Datei Metadaten (ls -lh) auszugeben.
Beispiellösung (offene Übung: Zahlen > 10)
#!/bin/bash
# Gibt nur numerische Argumente > 10 aus (Leerzeichen-getrennt)
for i in $@; do
# Prüfen, ob i nur aus Ziffern besteht
echo "$i" | grep "^[0-9]*$" > /dev/null
if [ $? -eq 0 ]; then
# Numerischen Vergleich durchführen
if [ "$i" -gt 10 ]; then
echo -n "$i "
fi
fi
done
echo "" # Abschlusszeile
Fazit
Mit Exit Codes, Argumentlisten, Schleifen und Eingabevalidierung werden aus einfachen Befehlsfolgen belastbare Shell-Werkzeuge. Diese Techniken sind prüfungsrelevant in Linux Essentials (Thema 3.3) und in der Praxis unverzichtbar – von wiederkehrenden Admin-Aufgaben bis zur Automatisierung im DevOps-Umfeld.

Schreibe einen Kommentar