Zoeken…


Syntaxis

  • getopts optstring naam [args]

parameters

Parameter Detail
optstring De te herkennen optietekens
naam Geef vervolgens de naam op waar de geparseerde optie is opgeslagen

Opmerkingen

opties

optstring : de te herkennen optstring

Als een teken wordt gevolgd door een dubbele punt, wordt van de optie verwacht dat deze een argument heeft, dat hiervan moet worden gescheiden door witruimte. De dubbele punt ( : ) (en vraagteken ? ) Kan niet worden gebruikt als optie karakters.

Elke keer dat het wordt aangeroepen, plaatst getopts de volgende optie in de naam van de shell-variabele, initialiseert de naam als deze niet bestaat, en de index van het volgende argument dat moet worden verwerkt in de variabele OPTIND . OPTIND wordt geïnitialiseerd op 1 telkens wanneer de shell of een shellscript wordt aangeroepen.

Wanneer een optie een argument vereist, plaatst getopts dat argument in de variabele OPTARG . De shell reset OPTIND automatisch; het moet handmatig worden gereset tussen meerdere oproepen om getopts binnen dezelfde shell-aanroep te krijgen als een nieuwe set parameters moet worden gebruikt.

Wanneer het einde van opties wordt aangetroffen, wordt getopts afgesloten met een retourwaarde groter dan nul.

OPTIND is ingesteld op de index van het eerste niet- OPTIND en de naam is ingesteld op ? . getopts ontleedt normaal gesproken de positionele parameters, maar als er meer argumenten worden gegeven in args , ontleedt getopts deze in plaats daarvan.

getopts kan fouten op twee manieren melden. Als het eerste teken van optstring is een dubbele punt ( : ), wordt stil foutrapportage gebruikt. Bij normaal gebruik worden diagnostische berichten afgedrukt wanneer ongeldige opties of ontbrekende optieargumenten worden aangetroffen.

Als de variabele OPTERR is ingesteld op 0 , worden er geen foutberichten weergegeven, zelfs als het eerste teken van optstring geen dubbele punt is.

Als u een ongeldige optie ziet, getopts plaatsen ? in name en, indien niet stil, drukt een foutmelding af en schakelt OPTARG . Als getopts stil is, wordt het gevonden OPTARG in OPTARG geplaatst en wordt er geen diagnostisch bericht afgedrukt.

Als een vereist argument niet wordt gevonden en getopts niet stil is, wordt een vraagteken ( ? ) In de name geplaatst, is OPTARG uitgeschakeld en wordt een diagnostisch bericht afgedrukt. Als getopts zwijgt, dan een dubbele punt ( : ) wordt geplaatst in naam en OPTARG is ingesteld op de optie karakter.

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

uitgang

$ ./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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow