GETOPT(1) Dienstprogramme fur Benutzer GETOPT(1) BEZEICHNUNG getopt - Befehlsoptionen auswerten (erweitert) UBERSICHT getopt Optionszeichenkette Parameter getopt [options] [--] Optionszeichenkette Parameter getopt [Optionen] -o|--options Optionszeichenkette [Optionen] [--] Parameter BESCHREIBUNG getopt wird dazu verwendet, Optionen in Befehlszeilen fur die leichtere Auswertung durch Shell-Prozeduren auseinanderzunehmen und auf gultige Optionen zu prufen. Es verwendet hierfur die Routinen GNU getopt(3). Die mit getopt aufgerufenen Parameter konnen in zwei Teile zerlegt werden: Optionen, die die Auswertung durch getopt verandern (die Optionen und die Optionszeichenkette in der UBERSICHT) und den Parametern, die ausgewertet werden sollen (Parameter in der UBERSICHT). Der zweite Teil beginnt beim ersten von einer Option verschiedenen Parameter, der kein Argument fur eine Option ist, oder nach dem ersten Auftreten von >>--<<. Falls im ersten Teil weder die Option -o noch --options gefunden wird, wird der erste Parameter des zweiten Teils als kurze Optionszeichenkette verwendet. Falls die Umgebungsvariable GETOPT_COMPATIBLE gesetzt ist oder der erste Parameter keine Option ist (er beginnt nicht mit >>-<<, dem ersten Format in der UBERSICHT), wird getopt Ausgaben erzeugen, die zu denen anderer Versionen von getopt(1) kompatibel sind. Es wird weiterhin Parameter tauschen und optionale Argumente erkennen (siehe Abschnitt KOMPATIBILITAT fur weitere Informationen). Traditionelle Implementierungen von getopt(1) sind nicht in der Lage, mit Leerraumen und anderen (Shell-spezifischen) Sonderzeichen in Argumenten und in von Optionen verschiedenen Parametern umzugehen. Um dieses Problem zu losen, kann diese Implementierung maskierte Ausgaben erzeugen, die erneut durch die Shell (normalerweise mittels des Befehls eval) interpretiert werden mussen. Damit werden diese Zeichen erhalten. Sie mussen aber getopt dergestalt aufrufen, dass es nicht mehr zu anderen Versionen kompatibel ist (das zweite oder dritte Format in der UBERSICHT). Um zu prufen, ob bei Ihnen diese erweiterte Version von getopt(1) installiert ist, kann eine spezielle Test-Option (-T) verwendet werden. OPTIONEN -a, --alternative erlaubt es, lange Optionen mit einem einfachen >>B*-*<< zu beginnen. -l, --longoptions Langoptionen Die lange (Mehrzeichen-)Option, die erkannt werden soll. Es kann mehr als ein Optionsnamen auf einmal angegeben werden, indem die Namen durch Kommata getrennt werden. Diese Option kann mehr als einmal verwendet werden, die Langoptionen sind kumulativ. Jeder lange Optionsname in Langoptionen darf durch einen Doppelpunkt gefolgt werden, um anzuzeigen, dass er ein zwingend verlangtes Argument hat, und durch zwei Doppelpunkte, um anzuzeigen, dass er ein optionales Argument hat. -n, --name Programmname Der Name, der von den getopt(3)-Routinen beim Berichten von Fehlern verwendet wird. Beachten Sie, dass Fehler von getopt(1) weiterhin als von Getopt-kommend berichtet werden. -o, --options Kurzoptionen gibt die kurzen (ein-Zeichen)-Optionen an, die erkannt werden sollen. Falls diese Option nicht gefunden wird, wird der erste Parameter von getopt, der nicht mit >>-<< startet (und kein Optionsargument ist), als die Kurzoptionszeichenkette verwendet. Jedes Kurzoptionszeichen in den Kurzoptionen kann von einem Doppelpunkt gefolgt werden, um anzuzeigen, dass er ein verpflichtendes Argument hat, und von zwei Doppelpunkten, um anzuzeigen, dass er ein optionales Argument hat. Das erste Zeichen der Kurzoptionen kann ein >>+<< oder >>-<< sein, um zu beinflussen, wie die Optionen ausgewertet und die Ausgabe generiert wird (siehe Abschnitt EINLESE-MODI fur Details). -q, --quiet deaktivert Fehlermeldung durch getopt(3). -Q, --quiet-output erzeugt keine normale Ausgabe. Fehler werden durch getopt(3) gemeldet, ausser Sie verwenden auch -q. -s, --shell Shell setzt die Maskierungsoptionen auf die der Shell. Falls die Option -s nicht angegeben ist, werden die Konventionen der BASH verwendet. Gultige Argumente sind derzeit >>sh<<, >>bash<<, >>csh<< und >>tcsh<<. -T, --test pruft, ob Ihr getopt(1) diese erweiterte Version oder eine alte Version ist. Dies erzeugt keine Ausgabe und setzt den Fehlerstatus auf 4. Andere Implementierungen von getopt(1) und diese Version, falls die Umgebungsvariable GETOPT_COMPATIBLE gesetzt ist, liefern >>--<< und einen Fehlerstatus von 0. -u, --unquoted maskiert die Ausgabe nicht. Beachten Sie, dass Leerraum und besondere (Shell-abhangige) Zeichen in diesem Modus zu Chaos fuhren konnen (wie sie dies auch in anderen Implementierungen von getopt(1) erzeugen). -h, --help zeigt einen Hilfetext an und beendet das Programm. -V, --version Display version and exit. AUSWERTUNG Dieser Abschnitt gibt das Format des zweiten Teils der Parameter von getopt (den Parametern in der UBERSICHT) an. Der nachste Abschnitt (AUSGABE) beschreibt die erstellte Ausgabe. Diese Parameter waren typischerweise die, mit denen eine Shell-Funktion aufgerufen wurde. Sie mussen darauf achten, dass jeder Parameter, mit dem eine Shell-Funktion aufgerufen wurde, genau einem Parameter in der Parameterliste von getopt entspricht (siehe BEISPIELE). Die gesamte Auswertung erfolgt in den GNU getopt(3)-Routinen. Die Parameter werden von links nach rechts ausgewertet. Jeder Parameter wird als Kurzoption, als Langoption, als Argument fur eine Option oder als Nichtoptionsparameter eingestuft. Eine einfache Kurzoption ist ein >>-<< gefolgt von einem Kurzoptionszeichen. Falls die Option ein zwingendes Argument hat, darf es direkt nach dem Optionszeichen oder als nachster Parameter (d.h. getrennt durch Leerraumzeichen auf der Befehlszeile) geschrieben werden. Falls die Option ein optionales Argument hat, muss es sofern vorhanden direkt nach dem Optionszeichen geschrieben werden. Es ist moglich, mehrere Kurzoptionen nach einem >>-<< anzugeben, solange alle (ausser moglicherweise dem letzten) keine zwingenden oder optionalen Argumente haben. Eine Langoption beginnt normalerweise mit >>--<<, gefolgt von dem Namen der Langoption. Falls die Option ein Argument zwingend benotigt, darf dieses direkt nach dem Namen der Langoption, getrennt durch ein >>=<<, oder als das nachste Argument (d.h. getrennt durch Leerraumzeichen auf der Befehlszeile) geschrieben werden. Falls die Option ein optionales Argument hat, muss es, falls vorhanden, direkt nach dem Namen der Langoption, getrennt durch ein >>=<< geschrieben werden. Falls Sie das >>=<< hinzufugen, aber nichts dahinter, wird es so interpretiert, als ob kein Argument vorhanden ware; dies ist ein kleiner Fehler, siehe FEHLER. Langoptionen durfen abgekurzt werden, so lange die Abkurzung noch eindeutig ist. Jeder Parameter, der nicht mit einem >>-<< anfangt und kein zwingendes Argument einer vorherigen Option ist, ist ein Nichtoptionsparameter. Jeder Parameter nach einem >>--<<-Parameter wird immer als Nichtoptionsparameter interpretiert. Falls die Umgebungsvariable POSIXLY_CORRECT gesetzt ist oder falls die Kurzoptionszeichenkette mit einem >>+<< anfangt, werden alle verbliebenen Parameter als Nichtoptionsparameter interpretiert, sobald der erste Nichtoptionsparameter gefunden wird. AUSGABE Fur jedes im vorherigen Abschnitt beschriebene Element wird eine Ausgabe erstellt. Die Ausgabe erfolgt in der Reihenfolge, in der die Elemente in der Eingabe vorliegen, ausser fur Nichtoptionsparameter. Die Ausgabe kann im kompatiblen (nicht maskierten) Modus erfolgen, oder so, dass Leerraum und andere besondere Zeichen innerhalb von Argumenten und Nichtoptionsparametern erhalten werden (siehe MASKIEREN). Wenn die Ausgabe in einem Shell-Skript verarbeitet wird, wird sie so erscheinen, als ob sie aus getrennten Elementen bestunde, die einer nach dem anderen verarbeitet werden konnen (in den meisten Shell-Sprachen mittels des Befehls >>shift<<). Im nicht maskierten Modus ist das nicht perfekt, da Elemente an unerwarteten Stellen aufgetrennt sein konnen, falls sie Leerraum oder besondere Zeichen enthalten. Falls es beim Auswerten der Parameter Probleme gibt, beispielsweise ein zwingendes Argument nicht gefunden oder eine Option nicht erkannt wird, wird ein Fehler auf Stderr berichtet. Es wird auch keine Ausgabe des betroffenen Elements geben und ein von Null verschiedener Fehlerstatus wird zuruckgeliefert. Fur eine Kurzoption wird ein einzelnes >>-<< und das Optionszeichen als ein Parameter erstellt. Falls die Option ein Argument hat, wird der nachste Parameter das Argument sein. Falls die Option ein optionales Argument hat, aber keines gefunden wurde, wird der nachste Parameter erstellt, aber im maskierten Modus leer sein. Im nicht maskierten (kompatibilitats-)Modus wird kein zweiter Parameter erstellt. Beachten Sie, dass viele andere getopt(1)-Implementierungen optionale Argumente nicht unterstutzen. Falls mehrere Kurzoptionen nach einem einzelnen >>-<< angegeben wurden, wird jede in der Ausgabe als separater Parameter vorhanden sein. Fur eine Langoption werden >>--<< und der komplette Optionsname als ein Parameter erstellt. Dies erfolgt unabhangig davon, ob die Option abgekurzt war oder mit einem einzelnen >>-<< in der Eingabe angegeben wurde. Argumente werden wie bei den Kurzoptionen gehandhabt. Normalerweise wird keine Ausgabe fur die Nichtoptionsparameter erstellt, bis alle Optionen und ihre Argumente erstellt wurden. Dann wird >>--<< als einzelner Parameter und danach werden die Nichtoptionsparameter in der gefundenen Reihenfolge, jeder als separater Parameter, erstellt. Nur falls das erste Zeichen der Kurzoptionszeichenkette ein >>-<< war, wird die Ausgabe der Nichtoptionsparameter an der Stelle erstellt, an der sie in der Eingabe gefunden wurden (dies wird nicht unterstutzt, falls das erste Format in der UBERSICHT verwendet wird; in diesem Fall werden alle vorangestellten >>-<< und >>+<< ignoriert). MASKIEREN Im Kompatibilitatsmodus werden Leerraumzeichen und >>besondere<< Zeichen in Argumenten nicht richtig behandelt. Da die Ausgabe an das Shell-Skript ubergeben wird, weiss das Skript nicht, wie es die Ausgabe in separate Parameter zerlegen soll. Um dieses Problem zu umgehen, bietet diese Implementierung das Maskieren an. Die Idee ist, dass die Ausgabe mit Anfuhrungszeichen um jeden Parameter erstellt wird. Wenn diese Ausgabe wieder an eine Shell (normalerweise mit dem Befehl eval einer Shell) ubergeben wird, wird sie korrekt in separate Parameter zerlegt. Falls die Umgebungsvariable GETOPT_COMPATIBLE gesetzt ist, die erste Form der UBERSICHT verwendet oder die Option -u gefunden wird, wird Maskieren nicht aktiviert. Verschiedene Shells verwenden verschiedene Maskierungskonventionen. Sie konnen die Option -s verwenden, um die von Ihnen verwendete Shell auszuwahlen. Die folgenden Shells werden derzeit unterstutzt: >>sh<<, >>bash<<, >>csh<< und >>tcsh<<. Tatsachlich werden nur zwei >>Varianten<< unterschieden: Sh-artige Maskierungskonventionen und Csh-artige Maskierungskonventionen. Es ist gut moglich, dass eine dieser Varianten verwendet werden kann, falls sie eine andere Shell-Skript-Sprache verwenden. EINLESE-MODI Das erste Zeichen der Zeichenkette von Kurzoptionen kann ein >>-<< oder ein >>+<< sein, um einen speziellen Einlese-Modus anzugeben. Wenn die erste Form verwendet wird, die unter UBERSICHT angegeben ist, werden sie ignoriert. Trotzdem wird die Umgebungsvariable POSIXLY_CORRECT ausgewertet. Wenn das erste Zeichen ein >>B*+*<< ist oder die Umgebungsvariable POSIXLY_CORRECT gesetzt ist, wird die Auswertung beendet, sobald der erste Nichtoptionsparameter (also ein Parameter, der nicht mit einem >>-<< beginnt) erkannt wird, der kein Optionsargument ist. Die restlichen Parameter werden alle als Nichtoptionsparameter interpretiert. Wenn das erste Zeichen ein >>-<< ist, werden Nichtoptionsparameter an der Stelle ausgegeben, an der sie gefunden werden. Im normalen Modus werden sie alle am Ende der Ausgabe gesammelt, nachdem ein >>--<<-Parameter erzeugt wurde. Beachten Sie, dass dieser >>--<<-Parameter weiterhin erzeugt wird, aber immer der letzte Parameter in diesem Modus ist. KOMPATIBILITAT Diese Version von getopt(1) wurde so geschrieben, dass sie so weit wie moglich kompatibel zu anderen Versionen ist. Normalerweise konnen Sie andere Versionen ohne Anderungen einfach durch diese Version ersetzen und haben dadurch sogar noch einige Vorteile. Wenn das erste Zeichen des ersten Parameters von getopt kein >>-<< ist, lauft getopt im Kompatibilitatsmodus. Es interpretiert den ersten Parameter als Zeichenkette von Kurzoptionen und alle weiteren Parameter werden ausgewertet. Es andert die Reihenfolge der Parameter (d.h. alle Nichtoptionsparameter werden am Ende ausgegeben), es sein denn, die Umgebungsvariable POSIXLY_CORRECT ist gesetzt. In diesem Fall stellt getopt den Kurzoptionen automatisch ein >>+<< voran. Die Umgebungsvariable GETOPT_COMPATIBLE zwingt getopt in den Kompatibilitatsmodus. Wenn sowohl diese Umgebungsvariable als auch POSIXLY_CORRECT gesetzt sind, kann 100% Kompatibilitat fur >>schwierige<< Programme erreicht werden. Normalerweise ist allerdings keine von beiden notwendig. Im Kompatibilitatsmodus werden fuhrende >>-<<- und >>+<<-Zeichen in der Kurzoptionen-Zeichenkette ignoriert. RUCKGABEWERTE getopt gibt den Fehlerstatus 0 bei einer erfolgreichen Auswertung zuruck, 1, falls getopt(3) Fehler zuruckliefert, 2, falls es die eigenen Parameter nicht auswerten kann, 3, falls ein interner Fehler wie fehlender Speicher auftritt und 4, falls es mit -T aufgerufen wird. BEISPIELE Beispielskripte fur (ba)sh und (t)csh sind in der getopt(1)-Distribution enthalten und werden optional im Verzeichnis /usr/share/doc/util-linux installiert. UMGEBUNGSVARIABLEN POSIXLY_CORRECT Diese Umgebungsvariable wird von den getopt(3)-Routinen untersucht. Falls sie gesetzt ist, wird die Auswertung gestoppt, sobald ein Parameter gefunden wird, der weder eine Option noch ein Optionsargument ist. Alle restlichen Parameter werden ebenfalls als Nichtoptionsparameter interpretiert, unabhangig davon, ob sie mit einem >>-<< beginnen oder nicht. GETOPT_COMPATIBLE erzwingt, dass getopt das erste in der UBERSICHT angegebene Aufrufformat verwendet. FEHLER getopt(3) kann Langoptionen mit optionalen Argumenten auswerten, denen ein leeres optionales Argument ubergeben wurde. Allerdings kann es das fur Kurzoptionen nicht. Dieses getopt(1) behandelt optionale Argumente, die leer sind, so, als waren sie nicht ubergeben worden. Die Syntax ist nicht sehr intuitiv, wenn man keinerlei Kurzoptionen haben mochte (sie mussen explizit auf eine leere Zeichenkette gesetzt werden). AUTOR Frodo Looijaard SIEHE AUCH bash(1), tcsh(1), getopt(3) FEHLER MELDEN For bug reports, use the issue tracker . VERFUGBARKEIT Der Befehl getopt ist Teil des Pakets util-linux, welches aus dem Linux-Kernel-Archiv heruntergeladen werden kann. util-linux 2.41 2025-03-29 GETOPT(1)