Bash
getopts: Intelligente Positionsparameteranalyse
Suche…
Syntax
- getopts optstring name [args]
Parameter
Parameter | Detail |
---|---|
optstring | Die zu erkennenden Optionszeichen |
Name | Dann Name, wo die geparste Option gespeichert ist |
Bemerkungen
Optionen
optstring
: Die zu erkennendenoptstring
Wenn auf ein Zeichen ein Doppelpunkt folgt, wird erwartet, dass die Option ein Argument hat, das durch Leerzeichen von ihm getrennt werden sollte. Der Doppelpunkt (
:
) (und Fragezeichen?
) Nicht als Option Zeichen verwendet werden.
Bei jedem Aufruf getopts
die nächste Option in den Namen der Shell-Variablen auf, initialisiert den Namen, falls er nicht existiert, und den Index des nächsten zu bearbeitenden Arguments in die Variable OPTIND
. OPTIND
wird bei jedem OPTIND
der Shell oder eines Shell-Skripts auf 1
initialisiert.
Wenn eine Option ein Argument erfordert, platziert getopts
dieses Argument in der Variablen OPTARG
. Die Shell setzt OPTIND
automatisch zurück. Es muss manuell zwischen mehreren Aufrufen von getopts
innerhalb desselben getopts
werden, wenn ein neuer Parametersatz verwendet werden soll.
Wenn das Ende der Optionen gefunden wird, wird getopts
mit einem Rückgabewert größer als Null beendet.
OPTIND
ist auf den Index des ersten OPTIND
gesetzt, und name ist auf ?
. getopts
parst normalerweise die Positionsparameter, aber wenn mehr Argumente in args
, parst getopts
diese stattdessen.
getopts
kann Fehler auf zwei Arten melden. Wenn das erste Zeichen von optstring
ein Doppelpunkt ist ( :
), schweigt Fehlerberichterstattung verwendet. Im Normalbetrieb werden Diagnosemeldungen gedruckt, wenn ungültige Optionen oder fehlende Optionsargumente gefunden werden.
Wenn die Variable OPTERR
auf 0
, werden keine Fehlermeldungen angezeigt, auch wenn das erste Zeichen der optstring
kein Doppelpunkt ist.
Wenn eine ungültige Option getopts
Orte getopts
?
in name
und druckt, falls nicht stumm, eine Fehlermeldung und deaktiviert OPTARG
. Wenn getopts
stumm ist, wird das gefundene OPTARG
in OPTARG
und es wird keine Diagnosemeldung gedruckt.
Wenn ein erforderliches Argument nicht gefunden wird und getopts
nicht stumm ist, wird ein Fragezeichen ( ?
) In den name
OPTARG
, OPTARG
wird nicht gesetzt und eine Diagnosemeldung wird gedruckt. Wenn getopts
schweigt, dann ein Doppelpunkt ( :
) in Namen gesetzt und OPTARG
der Option Zeichen gesetzt.
pingnmap
#!/bin/bash
# Script name : pingnmap
# Scenario : The systems admin in company X is tired of the monotonous job
# of pinging and nmapping, so he decided to simplify the job using a script.
# The tasks he wish to achieve is
# 1. Ping - with a max count of 5 -the given IP address/domain. AND/OR
# 2. Check if a particular port is open with a given IP address/domain.
# And getopts is for her rescue.
# A brief overview of the options
# n : meant for nmap
# t : meant for ping
# i : The option to enter the IP address
# p : The option to enter the port
# v : The option to get the script version
while getopts ':nti:p:v' opt
#putting : in the beginnnig suppresses the errors for invalid options
do
case "$opt" in
'i')ip="${OPTARG}"
;;
'p')port="${OPTARG}"
;;
'n')nmap_yes=1;
;;
't')ping_yes=1;
;;
'v')echo "pingnmap version 1.0.0"
;;
*) echo "Invalid option $opt"
echo "Usage : "
echo "pingmap -[n|t[i|p]|v]"
;;
esac
done
if [ ! -z "$nmap_yes" ] && [ "$nmap_yes" -eq "1" ]
then
if [ ! -z "$ip" ] && [ ! -z "$port" ]
then
nmap -p "$port" "$ip"
fi
fi
if [ ! -z "$ping_yes" ] && [ "$ping_yes" -eq "1" ]
then
if [ ! -z "$ip" ]
then
ping -c 5 "$ip"
fi
fi
shift $(( OPTIND - 1 )) # Processing additional arguments
if [ ! -z "$@" ]
then
echo "Bogus arguments at the end : $@"
fi
Ausgabe
$ ./pingnmap -nt -i google.com -p 80
Starting Nmap 6.40 ( http://nmap.org ) at 2016-07-23 14:31 IST
Nmap scan report for google.com (216.58.197.78)
Host is up (0.034s latency).
rDNS record for 216.58.197.78: maa03s21-in-f14.1e100.net
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds
PING google.com (216.58.197.78) 56(84) bytes of data.
64 bytes from maa03s21-in-f14.1e100.net (216.58.197.78): icmp_seq=1 ttl=57 time=29.3 ms
64 bytes from maa03s21-in-f14.1e100.net (216.58.197.78): icmp_seq=2 ttl=57 time=30.9 ms
64 bytes from maa03s21-in-f14.1e100.net (216.58.197.78): icmp_seq=3 ttl=57 time=34.7 ms
64 bytes from maa03s21-in-f14.1e100.net (216.58.197.78): icmp_seq=4 ttl=57 time=39.6 ms
64 bytes from maa03s21-in-f14.1e100.net (216.58.197.78): icmp_seq=5 ttl=57 time=32.7 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 29.342/33.481/39.631/3.576 ms
$ ./pingnmap -v
pingnmap version 1.0.0
$ ./pingnmap -h
Invalid option ?
Usage :
pingmap -[n|t[i|p]|v]
$ ./pingnmap -v
pingnmap version 1.0.0
$ ./pingnmap -h
Invalid option ?
Usage :
pingmap -[n|t[i|p]|v]