Verwenden Sie getopt
Warum getopt?
Um komplexe Befehlszeilenargumente zu analysieren, um Verwirrung zu vermeiden und die Optionen zu klären, die wir analysieren, damit der Leser der Befehle verstehen kann, was passiert.
Was ist getopt?
getopt
wird verwendet, um Optionen in Befehlszeilen aufzuteilen (zu analysieren), damit sie von Shell-Prozeduren einfach analysiert werden können und um auf legale Optionen zu überprüfen. Hierbei werden die GNU-getopt(3)
-Routinen verwendet.
getopt
kann folgende Arten von Optionen haben.
- Optionen ohne Wert
- Schlüssel-Wert-Paar-Optionen
Hinweis: In diesem Dokument, bei der Erklärung der Syntax:
- Alles innerhalb von
[ ]
ist ein optionales Parameter in der Syntax/Beispielen.
- ist ein Platzhalter, der bedeutet, dass er durch einen tatsächlichen Wert ersetzt werden sollte.
WIE MAN getopt
BENUTZT?
Syntax: Erste Form
getopt OptString Parameter
Beispiele:
# Das ist korrekt
getopt "hv:t::" -v 123 -t123
getopt "hv:t::" -v123 -t123 # -v und 123 haben keinen Leerzeichen
# -h hat keinen Wert.
getopt "hv:t::" -h -v123
# Das ist falsch. Nach -t darf kein Leerzeichen stehen.
# Nur optionale Parameter dürfen kein Leerzeichen zwischen Schlüssel und Wert haben
getopt "hv:t::" -v 123 -t 123
# Mehrere Argumente, die einen Wert haben.
getopt "h:v:t::g::" -h abc -v 123 -t21
# Mehrere Argumente ohne Wert
# Alle diese sind korrekt
getopt "hvt" -htv
getopt "hvt" -h -t -v
getopt "hvt" -tv -h
Hier sind h,v,t die Optionen und -h -v -t ist die Art und Weise, wie Optionen in der Befehlszeile angegeben werden sollen.
- 'h' ist eine Option ohne Wert.
- 'v:' bedeutet, dass die Option -v einen Wert hat und ist eine obligatorische Option. ':' bedeutet hat einen Wert.
- 't::' bedeutet, dass die Option -t einen Wert hat, aber optional ist. '::' bedeutet optional.
Bei optionalen Parametern darf der Wert keine Leerzeichen-Trennung mit der Option haben. So ist im Beispiel "-t123" -t die Option und 123 der Wert.
Syntax: Zweite Form
getopt [getopt_optionen] [--] OptString Parameter
Hier wird getopt in fünf Teile aufgeteilt
- Der Befehl selbst, d.h. getopt
- Die getopt_optionen, sie beschreiben, wie die Argumente analysiert werden sollen. einstrichigen Langoptionen, doppelstrichigen Optionen.
- --, trennt die getopt_optionen von den zu analysierenden Optionen und den erlaubten Kurzoptionen
- Die Kurzoptionen werden unmittelbar nach dem gefundenen -- genommen. Genauso wie bei der ersten Form-Syntax.
- Die Parameter, das sind die Optionen, die Sie dem Programm übergeben haben. Die Optionen, die Sie analysieren und deren tatsächliche Werte festlegen möchten.
Beispiele
getopt -l "name:,version::,verbose" -- "n:v::V" --name=Karthik -version=5.2 -verbose
Syntax: Dritte Form
getopt [getopt_optionen] -o|--optionen OptString [getopt_optionen] [--] [Parameter]
Hier wird getopt in fünf Teile aufgeteilt
- Der Befehl selbst, d.h. getopt
- Die getopt_optionen, sie beschreiben, wie die Argumente analysiert werden sollen. einstrichige Langoptionen, doppelstrichige Optionen.
- Die Kurzoptionen, d.h. -o oder --options. Genauso wie bei der ersten Form-Syntax, aber mit der Option "-o" und vor dem "--" (doppelter Strich).
- --, trennt die getopt_optionen von den zu analysierenden Optionen und den erlaubten Kurzoptionen
- Die Parameter, das sind die Optionen, die Sie dem Programm übergeben haben. Die Optionen, die Sie analysieren und deren tatsächliche Werte festlegen möchten.
Beispiele
getopt -l "name:,version::,verbose" -a -o "n:v::V" -- -name=Karthik -version=5.2 -verbose
GETOPT_OPTIONEN
getopt_optionen ändern die Art und Weise, wie Befehlszeilenparameter analysiert werden.
Hier sind einige der getopt_optionen
Option: -l oder --longoptions
Bedeutet, dass der getopt-Befehl mehrzeichen Optionen erkennen sollte. Mehrere Optionen werden durch Kommas getrennt.
Zum Beispiel wird --name=Karthik
als Langoption in der Befehlszeile gesendet. In getopt werden Langoptionen wie folgt verwendet
getopt -l "name:,version" -- "" --name=Karthik
Da name: angegeben ist, sollte die Option einen Wert enthalten
Option: -a oder --alternative
Bedeutet, dass der getopt-Befehl erlauben soll, dass eine Langoption einen einzelnen Bindestrich '-' anstelle von doppeltem Bindestrich '--' hat.
Beispielweise, anstelle von --name=Karthik
könnte man einfach -name=Karthik
verwenden
getopt -a -l "name:,version" -- "" -name=Karthik
Ein vollständiges Skriptbeispiel mit dem Code:
#!/bin/bash
# Dateiname: commandLine.sh
# Autor: @theBuzzyCoder
showHelp() {
# `cat << EOF` bedeutet, dass cat aufhören soll zu lesen, wenn EOF erkannt wird
cat << EOF
Verwendung: ./installer -v [-hrV]
Installieren von Vorbedingungen für EspoCRM mit Docker im Entwicklungsmodus
-h, -help, --help Hilfe anzeigen
-v, -espo-version, --espo-version Bestimmte Version von EspoCRM festlegen und herunterladen
-r, -rebuild, --rebuild PHP-Vendordatei mit Composer neu erstellen und kompiliertes CSS mit Grunt kompilieren
-V, -verbose, --verbose Skript im Verbose-Modus ausführen. Jeden Schritt der Ausführung ausgeben.
EOF
# EOF wurde oben gefunden und daher stoppt der cat-Befehl das Lesen. Dies ist äquivalent zu echo, aber viel ordentlicher beim Ausdrucken.
}
export version=0
export verbose=0
export rebuilt=0
# $@ sind alle an das Skript übergebenen Befehlszeilenparameter.
# -o ist für Kurzoptionen wie -v
# -l ist für Langoptionen mit doppeltem Bindestrich wie --version
# das Komma trennt verschiedene Langoptionen
# -a ist für Langoptionen mit einem Bindestrich wie -version
options=$(getopt -l "help,version:,verbose,rebuild,dryrun" -o "hv:Vrd" -a -- "$@")
# set --:
# Wenn diesem Optionszeichen keine Argumente folgen, werden die positionellen Parameter verworfen. Andernfalls wird den positionellen Parametern
# die Argumente zugewiesen, auch wenn einige von ihnen mit einem „-“ beginnen.
eval set -- "$options"
while true
do
case "$1" in
-h|--help)
showHelp
exit 0
;;
-v|--version)
shift
export version="$1"
;;
-V|--verbose)
export verbose=1
set -xv # Set xtrace und Verbose-Modus.
;;
-r|--rebuild)
export rebuild=1
;;
--)
shift
break;;
esac
shift
done
Ausführen dieser Skriptdatei:
# Mit zusammengefassten Kurzoptionen und Langoption
# Mit doppeltem Bindestrich '--version'
bash commandLine.sh --version=1.0 -rV
# Mit zusammengefassten Kurzoptionen und Langoption
# Mit einem Bindestrich '-version'
bash commandLine.sh -version=1.0 -rV
# ODER mit Kurzoption, die einen Wert hat, Wert durch Leerzeichen getrennt
# nach Schlüssel
bash commandLine.sh -v 1.0 -rV
# ODER mit Kurzoption, die einen Wert hat, Wert ohne Leerzeichen
# Trennung vom Schlüssel.
bash commandLine.sh -v1.0 -rV
# ODER Individuelle Kurzoptionen trennen
bash commandLine.sh -v1.0 -r -V