Verwenden getopt
Warum getopt?
Um ausgearbeitete 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), um das Parsen durch Shell-Prozeduren zu vereinfachen und um nach legalen Optionen zu suchen. Dazu 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 wird während der Erläuterung der Syntax Folgendes erläutert:
- Alles in [] ist ein optionaler Parameter in der Syntax / den Beispielen.
- ist ein Platzhalter, was bedeutet, dass er durch einen tatsächlichen Wert ersetzt werden sollte.
WIE BENUTZEN getopt
?
Syntax: Erste Form
getopt optstring parameters
Beispiele:
# This is correct
getopt "hv:t::" "-v 123 -t123"
getopt "hv:t::" "-v123 -t123" # -v and 123 doesn't have whitespace
# -h takes no value.
getopt "hv:t::" "-h -v123"
# This is wrong. after -t can't have whitespace.
# Only optional params cannot have whitespace between key and value
getopt "hv:t::" "-v 123 -t 123"
# Multiple arguments that takes value.
getopt "h:v:t::g::" "-h abc -v 123 -t21"
# Multiple arguments without value
# All of these are correct
getopt "hvt" "-htv"
getopt "hvt" "-h -t -v"
getopt "hvt" "-tv -h"
Hier sind h, v, t die Optionen und -h -v -t ist, wie Optionen in der Befehlszeile angegeben werden sollen.
- 'h' ist eine Option ohne Wert.
- 'v:' impliziert, dass die Option -v einen Wert hat und eine obligatorische Option ist. ':' bedeutet hat einen Wert.
- 't ::' impliziert, dass die Option -t einen Wert hat, aber optional ist. '::' bedeutet optional.
In optionalen Parametern kann value mit der Option keine Leerzeichen-Trennung aufweisen. Im Beispiel "-t123" ist -t also Option 123 ist Wert.
Syntax: Zweite Form
getopt [getopt_options] [--] [optstring] [parameters]
Hier wird getopt in fünf Teile geteilt
- Der Befehl selbst dh getopt
- In getopt_options wird beschrieben, wie die Argumente analysiert werden. Einzelstrich lange Optionen, Doppelstrichoptionen.
- - trennt die getopt_options von den Optionen, die Sie analysieren möchten, und den zulässigen kurzen Optionen
- Die kurzen Optionen werden sofort nach - gefunden. Genau wie die erste Syntax von Form.
- Die Parameter, dies sind die Optionen, die Sie an das Programm übergeben haben. Die Optionen, die Sie analysieren und die tatsächlichen Werte abrufen möchten.
Beispiele
getopt -l "name:,version::,verbose" -- "n:v::V" "--name=Karthik -version=5.2 -verbose"
Syntax: Dritte Form
getopt [getopt_options] [-o options] [--] [optstring] [parameters]
Hier wird getopt in fünf Teile geteilt
- Der Befehl selbst dh getopt
- In getopt_options wird beschrieben, wie die Argumente analysiert werden. Einzelstrich lange Optionen, Doppelstrichoptionen.
- Die kurzen Optionen sind -o oder --options. Genau wie die erste Syntax des Formulars, jedoch mit der Option "-o" und vor dem "-" (doppelter Bindestrich).
- - trennt die getopt_options von den Optionen, die Sie analysieren möchten, und den zulässigen kurzen Optionen
- Die Parameter, dies sind die Optionen, die Sie an das Programm übergeben haben. Die Optionen, die Sie analysieren und die tatsächlichen Werte abrufen möchten.
Beispiele
getopt -l "name:,version::,verbose" -a -o "n:v::V" -- "-name=Karthik -version=5.2 -verbose"
GETOPT_OPTIONS
getopt_options ändert die Art und Weise, wie Befehlszeilenparameter analysiert werden.
Nachfolgend einige der getopt_options
Option: -l oder --longoptions
Der Befehl getopt sollte die Erkennung von Optionen mit mehreren Zeichen ermöglichen. Mehrere Optionen werden durch Komma getrennt.
Beispielsweise --name=Karthik
wird eine lange Option in der Befehlszeile gesendet. In getopt werden lange Optionen verwendet
getopt "name:,version" "--name=Karthik"
Da name: angegeben ist, sollte die Option einen Wert enthalten
Option: -a oder --alternative
Der Befehl getopt sollte es ermöglichen, dass die lange Option einen einzelnen Bindestrich '-' anstelle eines doppelten Bindestrichs '-' enthält.
Beispiel, anstatt --name=Karthik
Sie könnten nur verwenden-name=Karthik
getopt "name:,version" "-name=Karthik"
Ein vollständiges Skriptbeispiel mit dem Code:
#!/bin/bash
# filename: commandLine.sh
# author: @theBuzzyCoder
showHelp() {
# `cat << EOF` This means that cat should stop reading when EOF is detected
cat << EOF
Usage: ./installer -v <espo-version> [-hrV]
Install Pre-requisites for EspoCRM with docker in Development mode
-h, -help, --help Display help
-v, -espo-version, --espo-version Set and Download specific version of EspoCRM
-r, -rebuild, --rebuild Rebuild php vendor directory using composer and compiled css using grunt
-V, -verbose, --verbose Run script in verbose mode. Will print out each step of execution.
EOF
# EOF is found above and hence cat command stops reading. This is equivalent to echo but much neater when printing out.
}
export version=0
export verbose=0
export rebuilt=0
# $@ is all command line parameters passed to the script.
# -o is for short options like -v
# -l is for long options with double dash like --version
# the comma separates different long options
# -a is for long options with single dash like -version
options=$(getopt -l "help,version:,verbose,rebuild,dryrun" -o "hv:Vrd" -a -- "$@")
# set --:
# If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters
# are set to the arguments, even if some of them begin with a ‘-’.
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 and verbose mode.
;;
-r|--rebuild)
export rebuild=1
;;
--)
shift
break;;
esac
shift
done
Ausführen dieser Skriptdatei:
# With short options grouped together and long option
# With double dash '--version'
bash commandLine.sh --version=1.0 -rV
# With short options grouped together and long option
# With single dash '-version'
bash commandLine.sh -version=1.0 -rV
# OR with short option that takes value, value separated by whitespace
# by key
bash commandLine.sh -v 1.0 -rV
# OR with short option that takes value, value without whitespace
# separation from key.
bash commandLine.sh -v1.0 -rV
# OR Separating individual short options
bash commandLine.sh -v1.0 -r -V
-s
, machen Sie ihn zu einem Positionsargument :./myscript 45 anystring
.