Recherche…


Syntaxe

  • getopts optstring name [args]

Paramètres

Paramètre Détail
optstring Les caractères d'option à reconnaître
prénom Puis le nom où l'option analysée est stockée

Remarques

Les options

optstring : les caractères d'option à reconnaître

Si un caractère est suivi de deux points, l’option doit avoir un argument, qui doit être séparé par un espace blanc. Les deux points ( : ) (point d'interrogation ? ) Ne peuvent pas être utilisés comme caractères d'option.

À chaque appel, getopts place l'option suivante dans le nom de la variable shell, en initialisant le nom s'il n'existe pas, et l'index du prochain argument à traiter dans la variable OPTIND . OPTIND est initialisé à 1 chaque fois que le shell ou un script shell est appelé.

Lorsqu'une option nécessite un argument, getopts place cet argument dans la variable OPTARG . Le shell ne réinitialise pas automatiquement OPTIND ; il doit être réinitialisé manuellement entre plusieurs appels à getopts dans la même invocation de shell si un nouvel ensemble de paramètres doit être utilisé.

Lorsque la fin des options est rencontrée, getopts avec une valeur de retour supérieure à zéro.

OPTIND est défini sur l'index du premier argument non-option et name est défini sur ? . getopts analyse normalement les paramètres de position, mais si plus d'arguments sont donnés dans args , getopts analyse à la place.

getopts peuvent signaler des erreurs de deux manières. Si le premier caractère de optstring est deux points ( : ), les rapports d'erreur silencieuse est utilisée. En fonctionnement normal, les messages de diagnostic sont imprimés lorsque des options non valides ou des arguments d'option manquants sont rencontrés.

Si la variable OPTERR est définie sur 0 , aucun message d'erreur ne sera affiché, même si le premier caractère de optstring n'est pas un deux-points.

Si une option non valide est vu, getopts places ? dans le name et, si non silencieux, imprime un message d'erreur et désélectionne OPTARG . Si getopts est silencieux, le caractère d'option trouvé est placé dans OPTARG et aucun message de diagnostic n'est imprimé.

Si un argument requis n'est pas trouvé et que getopts n'est pas silencieux, un point d'interrogation ( ? ) Est placé dans le name , OPTARG n'est pas OPTARG et un message de diagnostic est imprimé. Si getopts est silencieux, deux points ( : ) est placé dans le nom et OPTARG est réglé sur le caractère d'option.

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

Sortie

$ ./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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow