Sök…


Syntax

  • getopts optstring name [args]

parametrar

Parameter Detalj
flaggsträng Alternativtecken som ska kännas igen
namn Sedan namn där det parsade alternativet är lagrat

Anmärkningar

alternativ

optstring : Alternativtecken som ska kännas igen

Om ett tecken följs av en kolon förväntas alternativet ha ett argument, som bör separeras från det med vitrum. Kolon ( : ) (och frågetecken ? ) Kan inte användas som alternativ tecken.

Varje gång det åberopas placerar getopts nästa alternativ i skalvariabelns namn, initialiserar namn om det inte finns, och indexet för nästa argument som ska behandlas till variabeln OPTIND . OPTIND initieras till 1 varje gång skalet eller ett skalskript aktiveras.

När ett alternativ kräver ett argument placerar getopts detta argument i variabeln OPTARG . Skalet återställer inte OPTIND automatiskt; det måste återställas manuellt mellan flera samtal till getopts inom samma shell-kallelse om en ny uppsättning parametrar ska användas.

När slutet på alternativen stöter ut, kommer getopts med ett returvärde större än noll.

OPTIND är inställt på indexet för det första argumentet utan alternativ, och namnet är inställt på ? . getopts analyserar vanligtvis positionsparametrarna, men om fler argument ges i args , analyserar getopts dessa istället.

getopts kan rapportera fel på två sätt. Om det första tecknet i optstring är ett kolon ( : ) är tyst felrapportering används. Vid normal drift skrivs diagnostiska meddelanden ut när ogiltiga alternativ eller saknade alternativargument uppstår.

Om variabeln OPTERR är inställd på 0 visas inga felmeddelanden, även om det första tecknet i optstring inte är en kolon.

Om ett ogiltigt alternativ getopts placerar getopts platser ? till name och, om inte tyst, skriver ut ett felmeddelande och återställer OPTARG . Om getopts är tyst placeras det OPTARG alternativtecknet i OPTARG och inget diagnostiskt meddelande skrivs ut.

Om ett nödvändigt argument inte hittas, och getopts inte är tyst, placeras ett frågetecken ( ? ) I name , OPTARG avbryts och ett diagnostiskt meddelande skrivs ut. Om getopts är tyst, då ett kolon ( : ) placeras i namn och OPTARG är inställd på alternativet karaktär.

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

Produktion

$ ./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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow