(parse utility options)
Das in die POSIX-Shell sh eingebaute Kommando getopts wird in Shell-Prozeduren verwendet, um die Argumente und Optionen in der Kommandozeile zu analysieren und auf Gültigkeit zu überprüfen. Alle Regeln des Syntax-Standards für Kommandozeilen werden unterstützt.
getopts können Sie in Shell-Prozeduren zur Analyse der beim Prozedur-Aufruf angegebenen Argumente verwenden. Die einzelnen Optionen und Argumente werden der Reihe nach in Shell-Variablen abgelegt und können so einfach abgefragt bzw. überprüft werden. Wenn in der Argumentliste eine Option nicht zulässig ist oder wenn getopts für eine Option, die ein Argument verlangt, kein zugehöriges Argument erkennt, dann gibt getopts eine entsprechende Fehlermeldung aus.
Damit alle Prozeduren und Kommandos die Argumentliste einheitlich verarbeiten, sollte die Argumentliste immer mit getopts analysiert und auf gültige Optionen untersucht werden.
Syntax
getopts optstring name[ arg ...] |
Zeichenkette, die aus Buchstaben und Doppelpunkten : bestehen kann. Die in optstring angegebenen Buchstaben werden von getopts als zulässige Optionen der Shell-Prozedur betrachtet. Wenn hinter einem Buchstaben ein Doppelpunkt steht, so erwartet getopts für diese Option ein Argument oder eine Gruppe von Argumenten, die durch Leerzeichen oder Tabulatorzeichen von der Option getrennt sein müssen.
Name der Shell-Variablen, die bei jedem Aufruf von getopts mit der jeweils nächsten Option belegt wird.
Argumentliste, die von getopts analysiert wird. arg nicht angegeben: |
Arbeitsweise
Bei jedem Aufruf von getopts wird die Shell-Variable name mit dem Wert der jeweils nächsten Option belegt. Die Shell-Variable OPTIND wird mit der Nummer des nächsten Arguments belegt, das noch nicht verarbeitet wurde. OPTIND wird immer mit dem Wert 1 initialisiert, wenn der Kommandointerpreter sh oder eine Shell-Prozedur aufgerufen wird. Bei Optionen, die ein Argument verlangen, wird die Shell-Variable OPTARG mit diesem Argument belegt. Optionen, die ein Argument verlangen, müssen in optstring mit einem Doppelpunkt : gekennzeichnet sein. Liegt keine Option vor, oder hat die Option kein Argument, so wird OPTARG zurückgesetzt. Wird eine ungültige Option erkannt, so wird die Shell-Variable name mit einem Fragezeichen ? belegt. Ungültige Optionen sind solche, die nicht in optstring vorkommen. In diesem Fall (wenn das erste Zeichen in optstring ein Doppelpunkt : ist) wird die Shell-Variable OPTARG auf das gefundene Optionszeichen gesetzt, es wird aber keine Ausgabe auf die Standard-Fehlerausgabe geschrieben. Andernfalls wird die Shell-Variable OPTARG zurückgesetzt und eine Meldung auf die Standard-Fehlerausgabe geschrieben. Dies wird als erkannter Fehler in der Präsentation der Argumente für die aufrufende Anwendung interpretiert, ist aber kein Fehler von getopts. Fehlt ein Argument einer Option, so gilt:
Wenn das Ende der Optionsliste erreicht wurde, beendet sich getopts mit einem Endestatus ungleich Null. Das Ende der Optionsliste kann auch mit der speziellen Option -- gekennzeichnet werden. Wird der Wert der Shell-Variablen OPTIND verändert oder getopts mit unterschiedlichen Argumentlisten aufgerufen, so kann dies zu unerwarteten Ergebnissen führen. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos getopts: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel
Der folgende Ausschnitt aus einer Shell-Prozedur proz zeigt, wie die Argumente einer Prozedur verarbeitet werden können. Für proz sind die Optionen -a, -b und -o zulässig, für -o ist ein Argument erforderlich. Die Optionen -a und -b schließen sich gegenseitig aus; werden trotzdem beide angegeben, ist nur die zuletzt angegebene gültig: while getopts abo: c do case $c in [ab]) FLAG=$c;; o) OARG=$OPTARG;; \?) echo "usage: $0 [-a| -b] [-o <arg>]" exit 2;; esac done shift `expr $OPTIND - 1` Durch dieses Programmstück sind z.B. die folgenden Aufrufe von proz gleichbedeutend: proz -a -b -o "xxx z yy" datei proz -a -b -o "xxx z yy" -- datei proz -ab -o "xxx z yy" datei |