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 erkennenden optstring

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]


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow