💻 · Shell-Skripting

Bash: Die Sprache des Linux-Servers

Wer Linux-Server verwaltet, kommt an Bash nicht vorbei. Bash verbindet Werkzeuge, automatisiert wiederkehrende Aufgaben und ist auf jedem System vorhanden – kein Install, keine Dependencies, einfach da.

ShellScriptingCronPipelinesed/awk

Bash-Grundlagen die wirklich zählen

Bash hat viele Eigenheiten – aber ein kleines Subset deckt 90% der praktischen Aufgaben ab:

#!/bin/bash set -euo pipefail # Wichtig: Fehler nicht ignorieren # Variablen NAME="Welt" echo "Hallo $NAME" # Bedingungen if [[ -f "/etc/config" ]]; then echo "Config existiert" fi # Schleifen for file in /var/log/*.log; do echo "Verarbeite: $file" done # Funktionen backup() { local src="$1" tar czf "${src##*/}.tar.gz" "$src" }

set -euo pipefail am Anfang jedes Scripts ist Pflicht: stoppt bei Fehlern, nicht-definierten Variablen und Pipeline-Fehlern – spart stundenlange Debugging-Sessions.

Pipelines und Textverarbeitung: grep, sed, awk, jq

Die wahre Stärke von Bash liegt in der Kombination von Werkzeugen via Pipes:

  • grep: Muster suchen – grep -r "ERROR" /var/log/, mit -E für reguläre Ausdrücke
  • sed: Texte ersetzen – sed 's/alt/neu/g' oder Zeilen löschen/extrahieren
  • awk: Strukturierte Daten verarbeiten – Spalten extrahieren, Summen bilden: awk '{sum+=$3} END {print sum}'
  • jq: JSON in der Shell verarbeiten – für API-Responses: curl api.example.com | jq '.data[].name'

Kombiniert mit curl und jq lassen sich vollständige API-Integrationen in wenigen Zeilen Bash schreiben – ohne Python, ohne Dependencies.

Cron, Systemd-Timer und Deployment-Skripte

Bash-Skripte werden erst wertvoll wenn sie automatisch laufen:

  • Cron: Klassische Lösung – crontab -e, Zeitangabe im Format * * * * * (Minute Stunde Tag Monat Wochentag). Ausgabe per Mail oder in Log-Datei umleiten.
  • Systemd-Timer: Modernere Alternative mit besserer Logging-Integration, Abhängigkeiten und zuverlässigerem Verhalten nach Neustart. Für Server empfohlen.
  • Deployment-Skripte: Backup vor Deploy, Git Pull, Docker Compose Up, Health-Check, Benachrichtigung – alles in einem Skript. Wiederverwendbar für alle Projekte.

Mit KI-Assistenz lassen sich komplexe Bash-Skripte heute schnell generieren – trotzdem wichtig: jeden Befehl verstehen bevor man ihn als Root ausführt.

Häufige Fragen zu Bash

Bash für: Datei-Operationen, System-Befehle orchestrieren, Einzeiler und kurze Skripte. Python für: komplexe Logik, API-Calls mit Fehlerbehandlung, Datenverarbeitung. Faustregel: sobald du in Bash anfängst String-Parsing mit mehreren sed/awk-Pipes zu verketten, ist Python besser.

bash -x skript.sh gibt jeden ausgeführten Befehl aus – unverzichtbar. Oder set -x im Skript für einzelne Abschnitte. ShellCheck (shellcheck.net) analysiert Skripte statisch und findet häufige Fehler bevor sie passieren.

Immer mit Anführungszeichen: "$1" statt $1 – sonst Probleme bei Leerzeichen. Für komplexere Argument-Verarbeitung: getopts oder case "$1" in ... esac. Nutzereingaben nie direkt in eval oder als Shell-Befehle nutzen – Command Injection.

Funktionen in separate Dateien auslagern und mit source laden. Konfiguration in eine separate `.conf`-Datei. Logging-Funktion definieren statt echo zu verwenden. Ab einer gewissen Komplexität ernsthaft über den Wechsel zu Python nachdenken – Bash skaliert schlecht über ~200 Zeilen.