Zum Inhalt springen

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 erste Zeile jedes Bash-Skripts ist die Shebang (#!) – sie teilt dem Kernel mit, welcher Interpreter die Datei ausführen soll:

#!/bin/bash

Alternativ die portablere Form, die bash im $PATH sucht:

#!/usr/bin/env bash
Terminal-Fenster
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)

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/bash
set -euo pipefail
OptionBedeutung
-eBei Fehler (Exit-Code ≠ 0) sofort abbrechen
-uUndefinierte Variablen als Fehler behandeln
-o pipefailFehler in Pipes nicht verschlucken
Terminal-Fenster
# 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 erreicht

Ein gut strukturiertes Skript folgt diesem Muster:

#!/bin/bash
set -euo pipefail
# ─── Beschreibung ─────────────────────────────────────────
# Zweck: Tagesaktuelles Backup von /home erstellen
# Aufruf: ./backup.sh [zielverzeichnis]
# Autor: alice, 2026-03
# ──────────────────────────────────────────────────────────
# Konstanten
readonly QUELLE="/home"
readonly ZIEL="${1:-/backup}" # erstes Argument oder Standardwert
readonly DATUM=$(date +%Y-%m-%d)
readonly ARCHIV="${ZIEL}/home-${DATUM}.tar.gz"
# Funktionen
function aufraeumen() { ... }
function backup_erstellen() { ... }
# Hauptprogramm
backup_erstellen
Terminal-Fenster
# Einzeiliger Kommentar
set -x # Debugging einschalten: jede Zeile wird vor Ausführung ausgegeben
set +x # Debugging ausschalten

Debugging für einen einzelnen Abschnitt:

Terminal-Fenster
set -x
cp "$QUELLE" "$ZIEL"
set +x