Buscar..


Sintaxis

  • nombre optstring de getopts [args]

Parámetros

Parámetro Detalle
optstring Los caracteres de opción a reconocer.
nombre Luego nombre donde se almacena la opción analizada

Observaciones

Opciones

optstring : los caracteres opcionales a reconocer.

Si un carácter va seguido de dos puntos, se espera que la opción tenga un argumento, que debe estar separado de él por un espacio en blanco. Los dos puntos ( : ) (y signo de interrogación ? ) No pueden utilizarse como caracteres de opción.

Cada vez que se invoca, getopts coloca la siguiente opción en el nombre de la variable de shell, inicializando el nombre si no existe, y el índice del siguiente argumento que se procesará en la variable OPTIND . OPTIND se inicializa en 1 cada vez que se invoca el shell o un script de shell.

Cuando una opción requiere un argumento, getopts coloca ese argumento en la variable OPTARG . El shell no restablece OPTIND automáticamente; debe restablecerse manualmente entre varias llamadas a getopts dentro de la misma invocación de shell si se va a usar un nuevo conjunto de parámetros.

Cuando se encuentra el final de las opciones, getopts sale con un valor de retorno mayor que cero.

OPTIND se establece en el índice del primer argumento no opcional y el nombre se establece en ? . getopts normalmente analiza los parámetros posicionales, pero si se dan más argumentos en args , getopts analiza en su lugar.

getopts puede reportar errores de dos maneras. Si el primer carácter del optstring es de dos puntos ( : ), se utiliza el informe de errores en silencio. En el funcionamiento normal, los mensajes de diagnóstico se imprimen cuando se encuentran opciones inválidas o argumentos de opciones faltantes.

Si la variable OPTERR se establece en 0 , no se mostrarán mensajes de error, incluso si el primer carácter de optstring no es dos puntos.

Si se ve una opción no válida, getopts lugares getopts ? en name y, si no está en silencio, imprime un mensaje de error y OPTARG . Si getopts está en silencio, el carácter de opción encontrado se coloca en OPTARG y no se imprime ningún mensaje de diagnóstico.

Si no se encuentra un argumento requerido y getopts no está en silencio, se coloca un signo de interrogación ( ? ) En el name , se desactiva OPTARG y se imprime un mensaje de diagnóstico. Si getopts es silenciosa, luego dos puntos ( : ) se coloca en nombre y OPTARG se establece en el carácter de opción.

mapa de ping

#!/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

Salida

$ ./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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow