Linux Essentials 3.3 – Von Befehlen zum Skript (Lektion 2)

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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Andreas Moor
Andreas Moor
@blog@andreas-moor.de

Hallo Fediverse, ich bin Andy!

Hier und auf meiner Website findest du mein akkumuliertes Linux-Sysadmin-Wissen, meine kleinen und größeren Projekte und die Tools, die ich nutze.

Viel Spaß beim stöbern, lesen und lernen! 🧑‍💻

236 Beiträge
16 Folgende