getopt(1) getopt(1)
NAME
getopt - Argumente einer Prozedur nach Optionen durchsuchen (get opti-
ons)
SYNTAX
getopt optstring $*
BESCHREIBUNG
getopt wird in zukünftigen Versionen nicht mehr unterstützt werden. Es
wird durch das eingebaute sh-Kommando getopts(1) ersetzt. Alte Shell-
Prozeduren können Sie mit dem Konvertierungsprogramm
/usr/lib/getoptcvt von getopt auf getopts umstellen [siehe
getoptcvt(1)].
getopt liest den Inhalt des Shell-Parameters $* und vergleicht ihn mit
dem beim getopt-Aufruf angegebenen Argument optstring. Aufgrund dieses
Vergleichs bringt getopt entweder den eingelesenen Inhalt des Shell-
Parameters in eine Standardform und schreibt ihn so auf die Standard-
ausgabe oder gibt Fehlermeldungen auf die Standardfehlerausgabe aus.
getopt können Sie in Shell-Prozeduren zur Analyse der beim Prozedur-
Aufruf angegebenen Argumente verwenden. getopt unterteilt die in der
Kommandozeile angegebenen Argumente in Optionen der Prozedur und gege-
benenfalls deren Argumente. Die Aufruf-Argumente können so einfacher
analysiert und auf ihre Zulässigkeit überprüft werden.
ARGUMENTE
optstring
Zeichenkette, die aus Buchstaben und Doppelpunkten : bestehen
kann. Die in optstring angegebenen Buchstaben werden von getopt
als zulässige Optionen der Shell-Prozedur betrachtet. Wenn hinter
einem Buchstaben ein Doppelpunkt steht, so erwartet getopt für
diese Option ein Argument.
$* Shell-Parameter, der alle Aufrufargumente der zugehörigen Shell-
Prozedur enthält.
Analyse der Argumente einer Shell-Prozedur
Beim Aufruf einer Shell-Prozedur weist die Shell dem Stellungsparame-
ter $0 den Namen der Prozedur und dem Shell-Parameter $* alle Argu-
mente der Prozedur zu [siehe sh(1)]. Wenn Sie getopt in der Prozedur
verwenden, liest getopt den Inhalt des Shell-Parameters $* (d. h. die
Argumente der Prozedur) und vergleicht ihn mit optstring. Dabei zer-
legt getopt die angegebene Argumentliste in
- Optionen
- Argumente, die zu einer Option gehören
- sonstige Argumente.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getopt(1) getopt(1)
Für die Angabe der Argumente beim Aufruf einer Prozedur schreibt
getopt die folgenden Regeln vor:
- Die Optionen können in beliebiger Reihenfolge angegeben werden.
- Die Optionen können einzeln, durch Leerzeichen getrennt und jeweils
mit einem vorangestelltem Bindestrich - oder zusammengefaßt, ohne
trennende Leerzeichen und mit nur einem vorangestellten Bindestrich
angegeben werden, z. B.
proz -a -b -c
proz -ab -c
proz -abc
proz -b -ac
- Bei Optionen, die ein Argument verlangen, kann dieses Argument
direkt auf die Option folgen oder von dieser durch Leer- oder Tabu-
latorzeichen getrennt werden. Von der nachfolgenden Option muß das
Argument durch Leer- oder Tabulatorzeichen getrennt werden:
proz -a -b arg -c
proz -ab arg -c
proz -abarg -c
proz -acbarg
Vorsicht:
Eine Gruppe von Argumenten, die von der Option durch ein Leerzei-
chen getrennt ist und in Anführungszeichen " steht, wird von getopt
nicht korrekt behandelt:
proc -a -b -o "xxx z yy" datei
Das Argument "xxx z yy" für die Option -o wird nicht richtig
erkannt. Verwenden Sie in solchen Fällen getopts(1) statt getopt.
Entsprechen die beim Prozedur-Aufruf angegebenen Optionen der Festle-
gung getopt-Aufruf, gibt getopt die Argumente der Prozedur in Stan-
dardform auf die Standardausgabe aus. Die Optionen werden einzeln, mit
führendem Bindestrich und durch Leerzeichen voneinander getrennt aus-
gegeben. Auf Optionen, die ein Argument haben, folgt dieses Argument
durch ein Leerzeichen getrennt. Das Ende der Optionenliste kennzeich-
net getopt durch zwei Minuszeichen --; danach folgen die übrigen Argu-
mente der Prozedur, jeweils durch ein Leerzeichen getrennt.
Beispiel:
- optstring: a:b:cdef
- Argumente der Prozedur: -fb arg -caarg -de datei1 datei2
- Ausgabe von getopt: -f -b arg -c -a arg -d -e -- datei1 datei2
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
getopt(1) getopt(1)
Siehe auch Beispiel 1.
Wenn in der Argumentliste einer Prozedur eine Option nicht zulässig
ist oder wenn getopt für eine Option, die ein Argument verlangt, kein
zugehöriges Argument erkennt, dann gibt getopt eine entsprechende Feh-
lermeldung aus (siehe FEHLERMELDUNGEN). Wenn zu einer Option, die kein
Argument verlangt, ein Argument angegeben ist, interpretiert getopt
dieses Argument entweder als Optionenliste oder nimmt an dieser Stelle
das Ende der Optionenliste an.
Beispiel:
- optstring: abc
- Argumente der Prozedur: -a -barg -c
- Ausgabe von getopt, falls die Umgebungsvariable GETOPTPREFIX nicht
gesetzt ist:
getopt: illegal option -- r
getopt: illegal option -- g
oder:
Ausgabe von getopt, falls die Umgebungsvariable GETOPTPREFIX =
programm gesetzt ist:
pogramm: illegal option -- r
progamm: illegal option -- g
- optstring: abc
- Argumente der Prozedur: -a -b arg -c
- Ausgabe von getopt: -a -b -- arg -c
Die spezielle Option -- können Sie auch beim Aufruf der Prozedur ver-
wenden, um das Ende der Optionenliste anzuzeigen. Dies ist dann not-
wendig, wenn ein Argument einer Prozedur, das nicht einer Option
zugeordnet ist, mit einem Bindestrich beginnen soll (siehe Beispiel
1).
Mit dem eingebauten sh-Kommando set(1) können Sie die analysierte
Argumentliste, die getopt auf die Standardausgabe schreibt, weiterver-
arbeiten: Die Kommandozeile
set -- `getopt ...`
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
getopt(1) getopt(1)
weist das Ergebnis von getopt dem Shell-Parameter $* zu. Damit wird
der ursprüngliche Inhalt von $* (d. h. die nicht analysierten Aufru-
fargumente der Prozedur) durch die analysierten Aufrufargumente
ersetzt (siehe auch Beispiel 2).
FEHLERMELDUNGEN
Falls die Umgebungsvariable GETOPTPREFIX nicht gesetzt ist:
getopt: option requires an argument -- x
Falls die Umgebungsvariable GETOPTPREFIX = programm gesetzt ist:
programm: option requires an argument -- x
-x ist im getopt-Aufruf als Option mit Argument gekennzeichnet, Sie
haben beim Aufruf der Shell-Prozedur, in der dieser getopt-Aufruf ent-
halten ist jedoch kein Argument für -x angegebenen.
Falls die Umgebungsvariable GETOPTPREFIX nicht gesetzt ist:
getopt: illegal option --y
Falls die Umgebungsvariable GETOPTPREFIX = programm gesetzt ist:
programm: illegal option --y
-y ist nicht in der Liste der zulässigen Optionen (optstring) enthal-
ten, Sie haben -y jedoch beim Aufruf der Shell-Prozedur angegeben.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte. Wenn LCMESSAGES nicht oder als leere Zeichenkette definiert
ist, wird der Wert von LANG als Standardwert herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
BEISPIELE
Beispiel 1
Die Shell-Prozedur proz hat folgenden Inhalt:
echo $*
getopt -abo:f $*
echo $*
...
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
getopt(1) getopt(1)
Durch den getopt-Aufruf wird festgelegt, daß die Prozedur proz mit den
Optionen -a, -b, -o und -f aufgerufen werden kann und daß zu der
Option -o ein Argument angegeben werden muß.
Nun rufen Sie die Prozedur auf:
$ proz -bf -oarg datei
-bf -oarg datei
-b -f -o arg -- datei
-bf -oarg datei
Die echo-Ausgaben zeigen, daß die Argumente der Prozedur dem Shell-
Parameter $* zugewiesen werden und daß getopt an dieser Zuweisung
nichts ändert. Da die angegebene Argumentliste korrekt ist, gibt
getopt keine Fehlermeldung aus, sondern schreibt die Argumentliste in
Standardform auf die Standardausgabe.
Rufen Sie nun die Prozedur mit einer unzulässigen Option auf:
$ proz -abx datei
-abx datei
getopt: illegal option -- x
-abx datei
Wenn Sie der Prozedur ein Argument übergeben wollen, das mit einem
Bindestrich beginnt, dann müssen Sie beim Prozedur-Aufruf dieses Argu-
ment mit -- von der Optionenliste trennen:
$ proz -bf -oarg -- -argument
-bf -oarg -- -argument
-b -f -o arg -- -argument
-bf -oarg -- -argument
Mit -- kennzeichnen Sie das Ende der Optionenliste; alle auf -- fol-
genden Argumente interpretiert getopt nicht mehr als Optionen bzw. als
Argumente zu einer Option.
Beispiel 2
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:
GETOPTPREFIX = proz
set -- getopt abo: $*
if [ $? != 0 ]
then
echo "usage: $0 [-a | -b] [-o <arg>]"
exit 2
fi
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
getopt(1) getopt(1)
for i in $*
do
case $i in
-a | -b) FLAG=$i; shift;;
-o) OARG=$2; shift 2;;
--) shift; break;;
esac
done
Durch dieses Programmstück sind z. B. die folgenden Aufrufe von proz
gleichbedeutend:
proz -aoarg datei1 datei2
proz -a- o arg datei1 datei2
proz -oarg -a datei1 datei2
proz -boarg -a datei1 datei2
proz -a -o arg -- datei1 datei2
An einem Aufruf der Prozedur proz soll das Programmstück erläutert
werden.
Nehmen wir an, Sie rufen die Prozedur wie folgt auf:
$ proz -boarg -a datei1 datei2
getopt stellt fest, daß die angegebene Argumentliste korrekt ist, und
übergibt diese in folgendem Format an set:
-b -o arg -a -- datei1 datei2
set weist die Elemente dieser Argumentliste der Reihe nach den Stel-
lungsparametern $1, $2, ... und die gesamte Argumentliste dem Shell-
Parameter $* zu. Das Ergebnis dieser Zuweisung ist:
$1 = -b
$2 = -o
$3 = arg
$4 = -a
$5 = --
$6 = datei1
$7 = datei2
$* = -b -o arg -a -- datei1 datei2
Da die beim proz-Aufruf angegebene Argumentliste korrekt ist, ist die
Bedingung der if-Abfrage nicht erfüllt, und die Ausführung der Proze-
dur wird bei der for-Schleife fortgesetzt.
Erster Durchlauf der for-Schleife:
$i hat den Wert -b. Aufgrund der case-Abfrage wird der Wert -b der
Shell-Variablen FLAG zugewiesen. Nach der shift-Anweisung haben die
Shell-Parameter $1, $2, ..., $* die folgenden Werte:
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
getopt(1) getopt(1)
$1 = -o
$2 = arg
$3 = -a
$4 = --
$5 = datei1
$6 = datei2
$* = -o arg -a -- datei1 datei2
Zweiter Durchlauf der for-Schleife:
$i hat den Wert -o, die Prozedur verzweigt in den zweiten Teil der
case-Abfrage. Aufgrund der shift-Anweisung im ersten Durchlauf der
for-Schleife hat $2 den Wert arg; durch die Zuweisung OARG=$2 wird der
Shell-Variablen OARG also der Wert des zur Option -o gehörenden Argu-
ments zugewiesen. Nach der Anweisung shift 2 haben die Shell-Parameter
die folgenden Werte:
$1 = -a
$2 = --
$3 = datei1
$4 = datei2
$* = -a -- datei1 datei2
Dritter Durchlauf der for-Schleife:
$i hat den Wert arg. Da es für arg keinen case-Zweig gibt, geschieht
nichts und die Werte der Shell-Parameter $1, $2, ..., $* bleiben
unverändert.
Vierter Durchlauf der for-Schleife:
$i hat den Wert -a. Aufgrund der case-Abfrage wird der Wert -a der
Shell-Variablen FLAG zugewiesen und damit deren alter Wert -b über-
schrieben. Von den sich ausschließenden Optionen -a und -b ist also
nur die zuletzt angegebene gültig, in diesem Fall -a. Die Shell-
Parameter haben nach der shift-Anweisung die folgenden Werte:
$1 = --
$2 = datei1
$3 = datei2
$* = -- datei1 datei2
Fünfter Durchlauf der for-Schleife:
$i hat den Wert --. Aufgrund der break-Anweisung im zugehörigen case-
Zweig wird die for-Schleife beendet. Nach der shift-Anweisung haben
die Shell-Parameter $1, $2, $* die folgenden Werte:
$1 = datei1
$2 = datei2
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
getopt(1) getopt(1)
Mit einem weiteren Programmstück können nun auch diese Argumente
gewonnen und dann zusammen mit den Optionen und deren Argumenten ver-
arbeitet werden.
SIEHE AUCH
getoptcvt(1), getopts(1), sh(1), getopt(3C).
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98