Bash Argumente & Optionen

5 Kernkonzepte
Die wichtigsten Konzepte für Argumente und Optionen in Bash-Skripten: $1, $@ · Special Variables · shift · getopts · Flags Mit diesen Techniken können Sie flexible und benutzerfreundliche Skripte schreiben, die Parameter und Optionen wie professionelle Kommandozeilen-Tools verarbeiten.

Positional Parameters – $1, $2, ...

$1 $2 $3 ...
$1 $2 $3 ...

Positional Parameters ($1, $2, $3) sind die Argumente, die beim Aufruf eines Skripts übergeben werden. $0 ist der Skriptname selbst.

Wichtige Positional Parameters

Variable Beschreibung
$0 Skriptname (oder Pfad zum Skript)
$1, $2, ... Erstes, zweites ... Argument
${10}, ${11} Ab dem 10. Argument muss geklammert werden
Beispiel
#!/bin/bash
# Skript: beispiel.sh
echo "Skriptname: $0"
echo "Erstes Argument: $1"
echo "Zweites Argument: $2"
# Aufruf:
./beispiel.sh hallo welt
Ausgabe:
Skriptname: ./beispiel.sh
Erstes Argument: hallo
Zweites Argument: welt
Tipp: Verwenden Sie "${1:-default}" für Standardwerte, falls ein Argument fehlt.

Special Variables – $#, $@, $*, $?

$# $@ $* $? $$
$# $@ $* $?

Special Variables liefern wichtige Informationen über das Skript, die übergebenen Argumente und den letzten Befehlsstatus.

Übersicht der Special Variables

Variable Beschreibung
$# Anzahl der übergebenen Argumente
$@ Alle Argumente als einzelne Strings (mit Anführungszeichen)
$* Alle Argumente als ein String (ohne Anführungszeichen)
$? Exit-Status des letzten Befehls (0 = Erfolg)
$$ PID (Prozess-ID) des aktuellen Skripts
$! PID des letzten Hintergrund-Prozesses
Beispiele
#!/bin/bash
echo "Anzahl Argumente: $#"
echo "Alle Argumente (\$@): $@"
echo "Alle Argumente (\$*): $*"
# Schleife mit $@
for arg in "$@"; do
  echo "Argument: $arg"
done
# Exit-Status prüfen
ls /nonexistent
echo "Exit-Status: $?"
Tipp: Verwenden Sie "$@" in Schleifen, um Argumente mit Leerzeichen korrekt zu verarbeiten. $* ist dafür weniger geeignet.

shift – Argumente verschieben

shift [n]
shift 1

shift verschiebt die Positionsparameter nach links: $2 wird zu $1, $3 zu $2 usw. Nützlich, um Argumente der Reihe nach zu verarbeiten.

Häufige Verwendung

Kommando Beschreibung
shift Verschiebt um 1 Position (Standard)
shift 2 Verschiebt um 2 Positionen
shift n Verschiebt um n Positionen
Beispiele
#!/bin/bash
# Alle Argumente der Reihe nach verarbeiten
while [ $# -gt 0 ]; do
  echo "Argument: $1"
  shift
done
#!/bin/bash
# Erste 2 Argumente überspringen
shift 2
echo "Ab dem 3. Argument: $1"
Tipp: shift wird oft in Kombination mit while und case verwendet, um Optionen wie -f oder --help zu parsen.

getopts – Optionen parsen

getopts "optstring" varname
getopts "a:b:f" OPT

getopts ist der eingebaute Bash-Parser für Kommandozeilenoptionen wie -f oder -a wert. Es unterstützt sowohl einfache Flags als auch Optionen mit Argumenten.

Syntax-Erklärung

Element Beschreibung
optstring Zeichenkette mit Optionen. Doppelpunkt = Argument erforderlich
varname Variable für die gefundene Option
OPTARG Argument der aktuellen Option (bei :)
OPTIND Position des nächsten Arguments (für shift)
Beispiele
#!/bin/bash
# Optionen: -a mit Argument, -f ohne Argument
while getopts "a:f" opt; do
  case $opt in
    a) ausgabe="$OPTARG" ;;
    f) flag=true ;;
    \?) echo "Unbekannte Option" ;;  # Fallback
  esac
done
echo "Ausgabe: $ausgabe, Flag: $flag"
# Aufruf:
./script.sh -a "Hallo" -f
Ausgabe:
Ausgabe: Hallo, Flag: true
Tipp: getopts ist standardmäßig in Bash eingebaut und viel einfacher als manuelles Parsen. Es unterstützt keine langen Optionen wie --help – dafür gibt es getopt (extern).

Flags & Defaults – Boolesche Optionen

flag=${flag:-false}
var=${var:-"default"}

Flags sind boolesche Optionen (z.B. -v für "verbose"). Defaults setzen Standardwerte für Variablen, die nicht gesetzt wurden.

Syntax für Defaults

Syntax Beschreibung
${var:-default} Verwendet default, wenn var nicht gesetzt oder leer ist
${var:=default} Setzt var auf default, wenn nicht gesetzt (und verwendet es)
${var:?Fehler} Gibt Fehler aus, wenn var nicht gesetzt ist
${#var} Länge des Strings var
Beispiele
#!/bin/bash
# Flag mit Standardwert
verbose=${verbose:-false}

# Flag setzen (z.B. durch getopts)
if [ "$verbose" == true ]; then
  echo "Verbose Modus aktiv"
fi
# Standardwert für Dateipfad
logfile=${logfile:-/var/log/mylog.log}
echo "Log-Datei: $logfile"
# Fehler bei fehlender Variable
config=${config:?"CONFIG nicht gesetzt!"}
Ausgabe (erste zwei Beispiele):
Verbose Modus aktiv
Log-Datei: /var/log/mylog.log
Tipp: Kombinieren Sie getopts mit Defaults, um flexible Skripte zu erstellen, die sowohl mit als auch ohne Optionen funktionieren.

Quick Summary

$1 $2
Positionsparameter
$# $@
Spezialvariablen
shift
Argumente verschieben
getopts
Optionen parsen
${var:-def}
Flags & Defaults