TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸

Hilfe- und Nutzungshinweise in Bash-Skripten anzeigen

December 7, 2015

Eine klare und leicht zugängliche Hilfe-Nachricht ist entscheidend für die Benutzerfreundlichkeit eines jeden Kommandozeilen-Skripts. Eine usage- oder help-Funktion, die aufgerufen wird, wenn ein Benutzer -h, --help oder falsche Argumente angibt, ist eine bewährte Methode.

Diese Anleitung zeigt, wie Sie eine solche Funktion implementieren und in die Optionsverarbeitung Ihres Skripts integrieren.


1. Die usage-Funktion definieren

Es ist üblich, alle Hilfe- und Nutzungsinformationen in einer einzigen Funktion zu bündeln. Die Verwendung eines Here Documents (cat <<'EOF') ist ideal, um mehrzeilige Texte sauber zu formatieren, ohne echo für jede Zeile verwenden zu müssen.

code
#!/usr/bin/env bash

# Definiert die Funktion zur Anzeige der Hilfe
usage() {
  cat <<'EOF'
Ein Skript zur Verarbeitung von Dateien.

Verwendung:
  mein_skript.sh -f <datei> [-v] [-h]

Optionen:
  -f, --file <datei>    Die zu verarbeitende Eingabedatei (obligatorisch).
  -v, --verbose         Aktiviert die ausführliche Ausgabe.
  -h, --help            Zeigt diese Hilfe an und beendet das Skript.
EOF
}

2. Integration mit getopts

Die usage-Funktion wird typischerweise an zwei Stellen aufgerufen:

  1. Wenn der Benutzer explizit Hilfe anfordert (z.B. mit -h).
  2. Wenn der Benutzer ungültige Optionen oder fehlende Argumente übergibt.

Das folgende Beispiel integriert die usage-Funktion in eine getopts-Schleife.

code
#!/usr/bin/env bash
set -euo pipefail

# ... (usage-Funktion von oben hier einfügen) ...

# Standardwerte
FILE=""
VERBOSE=0

# Wenn keine Argumente übergeben werden, Hilfe anzeigen und beenden
if [ $# -eq 0 ]; then
  usage
  exit 1
fi

while getopts ":f:vh" opt; do
  case "$opt" in
    f)
      FILE="$OPTARG"
      ;;
    v)
      VERBOSE=1
      ;;
    h) # Hilfe anzeigen und erfolgreich beenden
      usage
      exit 0
      ;;
    :) # Fehlendes Argument für eine Option
      echo "Fehler: Die Option -$OPTARG erfordert ein Argument." >&2
      usage
      exit 1
      ;;
    \?) # Ungültige Option
      echo "Fehler: Unbekannte Option -$OPTARG" >&2
      usage
      exit 1
      ;;
  esac
done

# Überprüfen, ob die obligatorische Option -f gesetzt wurde
if [ -z "$FILE" ]; then
    echo "Fehler: Die Option -f ist obligatorisch." >&2
    usage
    exit 1
fi

# Hauptlogik des Skripts
echo "Verarbeite Datei: $FILE"
# ...

3. Die Bedeutung von Exit-Codes

Die Verwendung korrekter Exit-Codes ist wichtig für die Skript-Automatisierung.

  • exit 0: Zeigt einen erfolgreichen Abschluss an. Dies sollte verwendet werden, wenn der Benutzer die Hilfe mit -h aufruft, da dies kein Fehler ist.
  • exit 1 (oder ein anderer Wert > 0): Signalisiert einen Fehler. Dies sollte verwendet werden, wenn das Skript aufgrund falscher Benutzereingaben nicht ausgeführt werden kann.

Fazit

Eine gut implementierte usage-Funktion ist ein Kennzeichen eines professionellen Shell-Skripts. Sie verbessert nicht nur die Benutzerfreundlichkeit, sondern dient auch als kompakte Dokumentation der Funktionalität und der erwarteten Parameter des Skripts.