Bash
Kurz: Die auf den meisten Linux-Systemen und macOS verbreitetste Kommandozeilen-Shell — sowohl interaktive Konsole als auch eigene Skriptsprache für Automatisierung.
Genauer: Bash-Skripte automatisieren typische Terminal-Aufgaben (Dateien verschieben, Programme verketten, Build-/Deployment-Schritte). Anders als vollwertige Programmiersprachen ist Bash primär auf das Orchestrieren anderer Programme ausgelegt, nicht auf komplexe eigene Logik.
Im Detail
Herkunft und Verbreitung
Bash (“Bourne Again SHell”, ein Wortspiel auf die ursprüngliche Unix-Shell sh von Stephen Bourne, die Bash ablöste und erweiterte) ist seit Jahrzehnten die Standard-Shell auf den meisten Linux-Distributionen (macOS ist seit 2019 standardmäßig auf zsh umgestiegen, aus Lizenzgründen — neuere Bash-Versionen stehen unter der GPLv3, die Apple aus rechtlichen Gründen meiden wollte — Bash bleibt aber weit verbreitet und auf macOS meist zusätzlich verfügbar). Ein einfaches Bash-Skript, das über Dateien iteriert:
#!/bin/bash
for datei in *.txt; do
if [ -f "$datei" ]; then
echo "Verarbeite: $datei"
mv "$datei" "verarbeitet/$datei"
fi
donePipes als zentrales Werkzeug
Zentrales Prinzip der Unix-Philosophie, das Bash-Skripte stark prägt: kleine, spezialisierte Programme über Pipes (|) miteinander verketten, statt ein großes Programm alles machen zu lassen — z. B. cat log.txt | grep "Fehler" | wc -l, um Fehlerzeilen in einer Logdatei zu zählen. Jeder einzelne Befehl (cat, grep, wc) macht genau eine Sache gut, die Kombination über Pipes erzeugt daraus mächtige Auswertungen, ohne dass ein einzelnes Programm alle diese Fähigkeiten selbst mitbringen müsste.
Stärken und Grenzen
Bash ist deshalb besonders stark bei genau dieser Art Automatisierung: Build-Pipelines, Cronjobs (regelmäßig wiederkehrende automatisierte Aufgaben), Server-Provisioning (ein neuer Server wird automatisiert eingerichtet) und generell überall dort, wo bestehende Kommandozeilen-Tools kombiniert werden sollen. Für komplexere Programmlogik wird Bash schnell unhandlich: Fehlerbehandlung ist umständlich (Exit-Codes müssen explizit geprüft werden), echte Datenstrukturen wie verschachtelte Objekte fehlen praktisch komplett, und die Syntax für Bedingungen/Schleifen gilt selbst unter erfahrenen Entwicklern als eigenwillig und fehleranfällig (Leerzeichen an der “falschen” Stelle in einem if-Statement führen zu kryptischen Fehlern). Für alles, was über simple Befehlsverkettung hinausgeht, greift man deshalb eher zu Python oder einer vollwertigen Programmiersprache.
Bash in CI/CD-Pipelines
Bash-Skripte sind bis heute das Rückgrat vieler CI/CD-Pipelines (siehe CI/CD-Pipeline) — auch wenn moderne Tools wie GitHub Actions eigene YAML-Konfigurationen nutzen, führen die einzelnen Schritte darin letztlich meist ganz normale Shell-Befehle aus. Diese enge Verzahnung mit der Kommandozeile macht Bash-Grundkenntnisse auch für Entwickler relevant, die sonst nie bewusst Skripte schreiben würden — spätestens beim Debuggen einer fehlgeschlagenen Pipeline landet man fast immer bei rohen Shell-Befehlen.