Befehl "getopts"

Zweck

Verarbeitet Befehlszeilenargumente und prüft, ob die Optionen gültig sind.

Syntax

getopts OptionString Name [ Argument ...]

Beschreibung

Der Befehl getopts ist ein integrierter Korn-/POSIX-Shellbefehl, der Optionen und Optionsargumente aus einer Liste von Parametern abruft. Eine Option beginnt mit einem Pluszeichen (+) oder einem Minuszeichen (-) gefolgt von einem Zeichen. Eine Option, die nicht mit einem + oder einem - beginnt, beendet die Optionszeichenfolge. Jedes Mal, wenn der Befehl getopts aufgerufen wird, schreibt er den Wert der nächsten Option in Name und den Index des nächsten zu verarbeitenden Arguments in die Shellvariable OPTIND. Wenn die Shell aufgerufen wird, wird OPTIND mit 1 initialisiert. Wenn eine Option mit +beginnt, wird dem Wert in Nameein + vorangestellt.

Wenn einem Zeichen in Optionszeichenfolge ein Doppelpunkt (:) folgt, wird erwartet, dass diese Option ein Argument hat. Wenn eine Option ein Optionsargument erfordert, schreibt der Befehl getopts es in die Variable OPTARG.

Angenommen, es wird ein Optionszeichen, das nicht in Optionszeichenfolge enthalten ist, gefunden oder eine gefundene Option hat nicht das erforderliche Optionsargument:

  • Wenn OptionString nicht mit einem Doppelpunkt ( : ) beginnt,
    • Name wird auf ? gesetzt. (Fragezeichen),
    • OPTARG. wird nicht festgelegt und
    • eine Diagnosenachricht wird in die Standardfehlerausgabe geschrieben.

Diese Bedingung wird in Bezug auf die Art und Weise, in der die Argumente an die aufrufende Anwendung übergeben werden, als Fehler eingestuft, nicht aber als Fehler bei der Verarbeitung des Befehls getopts. Wie erwähnt, wird eine Diagnosenachricht geschrieben, aber der Exitstatus ist null.

  • Wenn OptionString mit einem Doppelpunkt ( : ) beginnt,
    • Name wird auf ? gesetzt. (Fragezeichen) für eine unbekannte Option oder zu einem : (Doppelpunkt) für eine fehlende erforderliche Option,
    • OPTARG wird auf das gefundene Optionszeichen gesetzt und
    • Es wird keine Ausgabe in die Standardfehlerausgabe geschrieben.

Eine der folgenden Optionen gibt das Ende der Optionen an: die spezielle Option - -, sucht ein Argument, das nicht mit -oder +beginnt oder bei dem ein Fehler auftritt.

Wenn das Ende der Optionen erreicht ist,

  • Der Befehl Getopts wird mit einem Rückgabewert größer als null beendet.
  • OPTARG wird auf den Index des ersten Nicht-Optionsarguments gesetzt, wobei das erste -Das Argument - wird als Optionsargument betrachtet, wenn vor ihm keine anderen Nicht-Optionsargumente angezeigt werden, oder der Wert $# + 1, wenn keine Nicht-Optionsargumente vorhanden sind.
  • Name wird auf ? gesetzt. (Fragezeichen).

Parameter

Element Beschreibung
OptionString Enthält die Zeichenfolge der vom Befehl getopts erkannten Optionszeichen. Wenn hinter einem Zeichen ein Doppelpunkt steht, wird erwartet, dass diese Option ein Argument hat, das als separates Argument angegeben werden muss. Die Optionen können durch Leerzeichen vom Argument getrennt werden. Das erste Zeichen in Optionszeichenfolge bestimmt, wie sich der Befehl getopts verhält, wenn ein Optionszeichen nicht bekannt ist oder wenn ein Optionsargument fehlt.

Anmerkung: Das Fragezeichen und der Doppelpunkt dürfen von einer Anwendung nicht als Optionszeichen verwendet werden. Die Verwendung anderer Zeichen, die nicht alphanumerisch sind, führt zu nicht spezifizierten Ergebnissen.

Name Wird vom Befehl getopts auf das gefundene Optionszeichen gesetzt.
Argument ... Eine oder mehrere durch Leerzeichen getrennte Zeichenfolgen, die vom Befehl getopts auf Gültigkeit überprüft werden. Wenn Argument weggelassen wird, werden die Positionsparameter verwendet.

Anmerkung: Gewöhnlich geben Sie Argument nicht mit dem Befehl getopts an. Für das Debugging Ihres Scripts kann dies jedoch hilfreich sein.

Exitstatus

Dieser Befehl gibt die folgenden Exitwerte zurück:

Element Beschreibung
0 Eine mit Optionszeichenfolge angegebene oder nicht angegebene Option wurde gefunden.
>0 Das Ende der Optionen wurde erreicht oder es ist ein Fehler aufgetreten.

Beispiele

  1. Der folgende Getopts Befehl gibt an, dassa,bundcsind gültige Optionen, und diese OptionenaundcArgumente haben:
    getopts a:bc: OPT
  2. Der folgende Getopts Befehl gibt an, dassa,bundcgültige Optionen sind, dass OptionenaundbArgumente haben und dass Getopts den Wert vonOPTin ? wenn eine nicht definierte Option in der Befehlszeile gefunden wird:
    getopts :a:b:c OPT
  3. Das folgende Script analysiert und zeigt es als Argumente an:
    aflag=
    bflag=
     
    while getopts ab: name
    do
                case $name in
                a)     aflag=1;;
                b)     bflag=1
                              bval="$OPTARG";;
                ?)     printf "Usage: %s: [-a] [-b value] args\n" $0
                              exit 2;;
               esac
    done
     
    if [ ! -z "$aflag" ]; then
               printf "Option -a specified\n"
    fi
     
    if [ ! -z "$bflag" ]; then
               printf 'Option -b "%s" specified\n' "$bval"
    fi
     
    shift $(($OPTIND -1))
    printf "Remaining arguments are: %s\n" "$*"