Bash-Scripting
Ein Shell-Skript ist eine Textdatei mit Bash-Befehlen, die sequenziell ausgeführt werden. Alles, was man interaktiv in der Shell tippt, lässt sich in ein Skript schreiben – und damit wiederholen, automatisieren und weitergeben.
Die Shebang-Zeile
Abschnitt betitelt „Die Shebang-Zeile“Die erste Zeile jedes Bash-Skripts ist die Shebang (#!) – sie teilt dem Kernel mit, welcher Interpreter die Datei ausführen soll:
#!/bin/bashAlternativ die portablere Form, die bash im $PATH sucht:
#!/usr/bin/env bashSkript ausführbar machen
Abschnitt betitelt „Skript ausführbar machen“chmod +x skript.sh # ausführbar machen./skript.sh # ausführen (führendes ./ nötig, da . oft nicht in $PATH)
bash skript.sh # alternativ: direkt mit bash aufrufen (ohne chmod)Sicherheitsnetz: set-Optionen
Abschnitt betitelt „Sicherheitsnetz: set-Optionen“Standardmäßig läuft Bash sehr permissiv: Fehler werden ignoriert, undefinierte Variablen ergeben einen leeren String. Für robuste Skripte empfiehlt sich dieser Block direkt nach der Shebang:
#!/bin/bashset -euo pipefail| Option | Bedeutung |
|---|---|
-e | Bei Fehler (Exit-Code ≠ 0) sofort abbrechen |
-u | Undefinierte Variablen als Fehler behandeln |
-o pipefail | Fehler in Pipes nicht verschlucken |
# Ohne set -e:cp wichtig.txt /backup/ # schlägt fehl (kein Platz)rm wichtig.txt # wird trotzdem ausgeführt – Datei weg!
# Mit set -e:cp wichtig.txt /backup/ # schlägt fehl# → Skript bricht hier ab, rm wird nie erreichtSkript-Struktur
Abschnitt betitelt „Skript-Struktur“Ein gut strukturiertes Skript folgt diesem Muster:
#!/bin/bashset -euo pipefail
# ─── Beschreibung ─────────────────────────────────────────# Zweck: Tagesaktuelles Backup von /home erstellen# Aufruf: ./backup.sh [zielverzeichnis]# Autor: alice, 2026-03# ──────────────────────────────────────────────────────────
# Konstantenreadonly QUELLE="/home"readonly ZIEL="${1:-/backup}" # erstes Argument oder Standardwertreadonly DATUM=$(date +%Y-%m-%d)readonly ARCHIV="${ZIEL}/home-${DATUM}.tar.gz"
# Funktionenfunction aufraeumen() { ... }function backup_erstellen() { ... }
# Hauptprogrammbackup_erstellenKommentare und Debugging
Abschnitt betitelt „Kommentare und Debugging“# Einzeiliger Kommentar
set -x # Debugging einschalten: jede Zeile wird vor Ausführung ausgegebenset +x # Debugging ausschaltenDebugging für einen einzelnen Abschnitt:
set -xcp "$QUELLE" "$ZIEL"set +x