Übersicht
getopt ist ein leistungsstarkes Werkzeug zur Verarbeitung komplexer Kommandozeilenoptionen in Shell-Skripten. Es parst Optionen auf standardisierte Weise, was die Robustheit des Skripts erhöht und eine benutzerfreundliche Oberfläche bietet. Es ist besonders nützlich, wenn sowohl kurze als auch lange Optionen verarbeitet werden müssen.
Hauptmerkmale
- Unterstützung für kurze Optionen (-a) und lange Optionen (--long-option)
- Automatische Trennung und Neuanordnung von Optionsargumenten
- Fehlerbehandlung und Identifizierung nicht standardmäßiger Optionen
- Verbesserung der Flexibilität und Benutzerfreundlichkeit von Skripten
Wichtige Optionen
getopt bietet verschiedene Optionen, die zum Definieren und Parsen von Optionen in Skripten verwendet werden. Mit diesen Optionen können Sie angeben, wie Kommandozeilenargumente interpretiert werden sollen.
Optionsdefinition
Verhaltenskontrolle
Erzeugter Befehl:
Kombinieren Sie die Befehle.
Beschreibung:
`getopt` Führen Sie den Befehl aus.
Kombinieren Sie diese Optionen und führen Sie die Befehle virtuell zusammen mit der KI aus.
Anwendungsbeispiele
Betrachten Sie verschiedene Szenarien zum Parsen von Kommandozeilenoptionen mit getopt. Die folgenden Beispiele zeigen, wie getopt in Skripten verwendet werden kann.
Grundlegendes Parsen von Kurzoptionen
getopt -o a:b -- "$@"
Parst Optionen, bei denen `-a` ein Argument benötigt und `-b` keines benötigt. `--` trennt Optionen von Nicht-Options-Argumenten.
Parsen von Kurz- und Langoptionen zusammen
getopt -o a:b -l alpha:,beta -- "$@"
Definiert Kurzoptionen mit `-o` und Langoptionen mit `-l`. `--alpha` benötigt ein Argument, `--beta` benötigt keines.
Verwendung von getopt in einem Shell-Skript
#!/bin/bash
# Optionen definieren: -a (benötigt Argument), -b (benötigt kein Argument)
# --alpha (benötigt Argument), --beta (benötigt kein Argument)
TEMP=$(getopt -o a:b --long alpha:,beta -- "$@")
# Skript beenden, wenn getopt einen Fehler zurückgibt
if [ $? -ne 0 ]; then
echo "Fehler beim Parsen der Optionen."
exit 1
fi
# Die Ausgabe von getopt auf die aktuellen Shell-Positionsargumente setzen
# eval löst Probleme mit der Anführungszeichenbehandlung, und set -- ersetzt die vorhandenen Argumente
eval set -- "$TEMP"
# Schleife zur Verarbeitung der Optionen
while true; do
case "$1" in
-a|--alpha)
echo "Option A/alpha erkannt. Wert: $2"
shift 2 # Option und Argument überspringen
;;
-b|--beta)
echo "Option B/beta erkannt."
shift # Nur die Option überspringen
;;
--)
shift # Trennzeichen zwischen Optionen und Nicht-Options-Argumenten überspringen
break
;;
*)
echo "Interner Fehler!"
exit 1
;;
esac
done
echo "\nVerbleibende Nicht-Options-Argumente: $@"
Eine typische Skriptstruktur, bei der die Ausgabe von getopt mit `eval set --` auf die aktuellen Shell-Positionsargumente gesetzt und die Optionen mit `while` und `case` verarbeitet werden.
Tipps & Hinweise
Tipps und Hinweise zur effektiven Verwendung von getopt. Achten Sie besonders auf die `eval set --`-Syntax und die Fehlerbehandlung.
Wichtige Tipps
- Verwenden Sie `eval set -- "$(getopt ...)"`: Dies ist die Standardmethode, um die Ausgabe von `getopt` sicher auf die Positionsargumente der aktuellen Shell zu setzen. `eval` löst Probleme mit der Anführungszeichenbehandlung, und `set --` löscht die vorhandenen Positionsargumente und ersetzt sie durch das Ergebnis von `getopt`.
- Achten Sie auf Doppelpunkte bei der Optionsdefinition: Ein Doppelpunkt nach einer Option bedeutet, dass diese Option ein Argument benötigt. Zwei Doppelpunkte (::) bedeuten ein optionales Argument, aber dies kann je nach Version oder Implementierung von `getopt` unterschiedlich funktionieren, seien Sie also vorsichtig.
- Die Bedeutung von `--`: Es ist wichtig, Optionen und Nicht-Options-Argumente bei einem `getopt`-Aufruf mit `--` klar zu trennen. Dies stellt sicher, dass `getopt` alle Optionen verarbeitet und die restlichen Argumente unverändert weitergibt.
- Fehlerbehandlung: `getopt` gibt einen Exit-Code ungleich Null zurück, wenn ein Parsing-Fehler auftritt. Es ist ratsam, dies in Ihrem Skript zu überprüfen, eine entsprechende Fehlermeldung auszugeben und das Skript zu beenden.