Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
Shell-Programmierung von Jürgen Wolf
Einführung, Praxis, Referenz
Buch: Shell-Programmierung

Shell-Programmierung
782 S., mit CD, 44,90 Euro
Rheinwerk Computing
ISBN 3-89842-683-1
gp Kapitel 3 Parameter und Argumente
  gp 3.1 Einführung
  gp 3.2 Kommandozeilenparameter $1 bis $9
  gp 3.3 Besondere Parameter
    gp 3.3.1 Die Variable $*
    gp 3.3.2 Die Variable $@
    gp 3.3.3 Die Variable $#
  gp 3.4 Der Befehl shift
  gp 3.5 Argumente und Leerzeichen
  gp 3.6 Argumente jenseits von $9
    gp 3.6.1 Beliebig viele Argumente (Bash und Korn-Shell only)
  gp 3.7 Argumente setzen mit set und Kommando-Substitution
  gp 3.8 getopts – Kommandozeilenoptionen auswerten
  gp 3.9 Vorgabewerte für Variablen


Rheinwerk Computing

3.8 getopts – Kommandozeilenoptionen auswertetoptop

Bei fast allen Linux-UNIX-Kommandos finden Sie so genannte Optionen, die mit einem Minuszeichen () eingeleitet werden. Bspw. bei ls –l ist –l die Option. Um sich um solche Optionen zu kümmern, können Sie die Argumente der Kommandozeile entweder selbst überprüfen und auswerten oder Sie verwenden den Befehl getopts. Hier die Syntax zu getopts:

getopts Optionen Variable [Argumente]

Um die Funktion getopts richtig einzusetzen, müssen Sie folgende Regeln beachten:

gp  Auch wenn getopts benutzt wird, so setzt dies nicht voraus, dass unbedingt Optionen angegeben werden müssen.
gp  Optionen müssen vor dem Dateinamen bzw. Parameter stehen:
kommando -o datei.txt   # Richtig
kommando datei.txt -o   # Falsch
gp  Die Reihenfolge, in der die Optionen angegeben werden, ist unwichtig:
kommando -o -x datei.txt # Richtig
kommando -x -o datei.txt # Auch richtig
gp  Optionen können auch zusammengefasst werden:
kommando -ox datei.txt # Richtig
kommando -xo datei.txt # Richtig

Wird getopts aufgerufen, überprüft dieses Kommando, ob sich eine Option (eingeleitet mit einem »«) in den Positionsparametern (von links nach rechts) befindet. Der Parameter, der als Nächstes bearbeitet werden soll, wird bei einer Shell in der automatischen Variable OPTIND verwaltet. Der Wert dieser Variablen beträgt beim Aufruf erst einmal 1 – wird aber bei jedem weiteren getopts-Aufruf um 1 erhöht. Wenn eine Kommandozeile mehrfach eingelesen werden soll, muss der Index manuell zurückgesetzt werden.

Wird eine Option gefunden, dann wird dieses Zeichen der Variablen »Variable« zugewiesen. In der Zeichenkette »Optionen« werden alle Schalter mit einem Kennbuchstaben angegeben. Schalter, die zusätzliche Argumente erhalten, bekommen einen Doppelpunkt dahinter angehängt. Die Optionen, die ein weiteres Argument erwarten (also die, die mit einem Doppelpunkt markiert sind), werden in der Shell-Variablen OPTARG gespeichert.

Wenn nicht ausdrücklich ein »Argument« beim Aufruf von getopts übergeben wird, verwendet das Shell-Kommando die Positionsparameter, also die Argumente von der Kommandozeile des Scripts.

Wenn getopts 0 zurückliefert, deutet dies auf eine gefundene Option hin. Bei einem Wert ungleich 0 wurde das Ende der Argumente erreicht oder es ist ein Fehler aufgetreten. Wollen Sie eine Fehlermeldungsausgabe vermeiden, können Sie einen Doppelpunkt als erstes Zeichen verwenden oder die Shell-Variable OPTERR auf 0 setzen.

Gewöhnlich wird getopts in einer Schleife mit einer case-Konstruktion ausgewertet. Zwar wurde beides bisher noch nicht behandelt (erst im nächsten Kapitel), aber trotzdem will ich es an dieser Stelle nicht bei der trockenen Theorie belassen. Hier ein mögliches Beispiel:

# Demonstriert getopt
# Name: agetopter
while getopts abc:D: opt
do
   case $opt in
       a) echo "Option a";;
       b) echo "Option b";;
       c) echo "Option c : ($OPTARG)";;
       D) echo "Option D : ($OPTARG)";;
   esac
done

Das Script bei der Ausführung:

you@host > ./agetopter -a
Option a
you@host > ./agetopter -b
Option b
you@host > ./agetopter -c
./agetopter: option requires an argument -- c
you@host > ./agetopter -c Hallo
Option c : (Hallo)
you@host > ./agetopter -D
./agetopter: option requires an argument -- D
you@host > ./agetopter -D Nochmals
Option D : (Nochmals)
you@host > ./agetopter -ab
Option a
Option b
you@host > ./agetopter -abD
Option a
Option b
./agetopter: option requires an argument -- D
you@host > ./agetopter -abD Hallo
Option a
Option b
Option D : (Hallo)
you@host > ./agetopter -x
./agetopter: illegal option – x

Im Beispiel konnten Sie außerdem auch gleich die Auswirkungen des Doppelpunktes hinter einem Optionszeichen erkennen. Geben Sie bei Verwendung einer solchen Option kein weiteres Argument an, wird eine Fehlermeldung zurückgegeben. Selbst ein falsches Argument wertet getopts hier aus und meldet den Fehler.

Wollen Sie die Fehlerausgabe selbst behandeln, also nicht eine von getopts produzierte Fehlermeldung verwenden, dann müssen Sie die Ausgabe von getopts in das Datengrab (/dev/null) schieben und als weitere Option in case ein Fragezeichen auswerten. Im Fehlerfall liefert Ihnen nämlich getopts ein Fragezeichen zurück. Dasselbe Script, jetzt ohne getopts-Fehlermeldungen:

# Demonstriert getopt
# Name: agetopter2
while getopts abc:D: opt 2>/dev/null
do
   case $opt in
       a) echo "Option a";;
       b) echo "Option b";;
       c) echo "Option c : ($OPTARG)";;
       D) echo "Option D : ($OPTARG)";;
       ?) echo "($0): Ein Fehler bei der Optionsangabe"
   esac
done

Das Script bei einer fehlerhaften Ausführung:

you@host > ./agetopter2 -D
(./agetopter2): Ein Fehler bei der Optionsangabe
you@host > ./agetopter2 -x
(./agetopter2): Ein Fehler bei der Optionsangabe


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
 << zurück
  
  Zum Katalog
Zum Katalog: Shell-Programmierung
Shell-Programmierung
bestellen
 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de