Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getopt(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getoptcvt(1)

getopts(1)

sh(1)

getopt(3C)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026