Ricerca…


Sintassi

  • getopts nome optstring [args]

Parametri

Parametro Dettaglio
optstring I caratteri opzione da riconoscere
nome Quindi nominare dove è stata memorizzata l'opzione analizzata

Osservazioni

Opzioni

optstring : i caratteri opzione da riconoscere

Se un carattere è seguito da due punti, l'opzione dovrebbe avere un argomento, che dovrebbe essere separato da esso da uno spazio bianco. I due punti ( : ) (e il punto interrogativo ? ) Non possono essere utilizzati come caratteri di opzione.

Ogni volta che viene invocato, getopts inserisce l'opzione successiva nel nome della variabile della shell, nel nome di inizializzazione se non esiste e nell'indice dell'argomento successivo da elaborare nella variabile OPTIND . OPTIND è inizializzato a 1 ogni volta che viene invocata la shell o uno script di shell.

Quando un'opzione richiede un argomento, getopts colloca tale argomento nella variabile OPTARG . La shell non resetta automaticamente OPTIND ; deve essere ripristinato manualmente tra più chiamate a getopts all'interno della stessa chiamata di shell se deve essere utilizzato un nuovo set di parametri.

Quando si verifica la fine delle opzioni, getopts viene getopts con un valore di ritorno maggiore di zero.

OPTIND è impostato sull'indice del primo argomento non opzionale e il nome è impostato su ? . getopts normalmente analizza i parametri posizionali, ma se vengono forniti più argomenti in args , getopts analizza invece.

getopts può segnalare errori in due modi. Se il primo carattere di optstring è due punti ( : ), è usata la segnalazione di errori in silenzio. Durante il normale funzionamento, i messaggi di diagnostica vengono stampati quando si incontrano opzioni non valide o argomenti di opzioni mancanti.

Se la variabile OPTERR è impostata su 0 , non verranno visualizzati messaggi di errore, anche se il primo carattere di optstring non è un due punti.

Se viene visualizzata un'opzione non valida, getopts places ? nel name e, se non silenzioso, stampa un messaggio di errore e disattiva OPTARG . Se getopts è silenzioso, il carattere dell'opzione trovato viene inserito in OPTARG e non viene stampato alcun messaggio di diagnostica.

Se non viene trovato un argomento obbligatorio e getopts non è silenzioso, viene inserito un punto interrogativo ( ? ) Nel name , OPTARG non è impostato e viene stampato un messaggio di diagnostica. Se getopts è in silenzio, poi i due punti ( : ) è posto in nome e OPTARG è impostato sul carattere di opzione.

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

Produzione

$ ./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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow