Поиск…


Синтаксис

  • getopts optstring name [args]

параметры

параметр подробность
строка_опций Символы опций, подлежащие распознаванию
название Затем имя, где хранится опция синтаксического анализа

замечания

Опции

optstring : символы опций, подлежащие распознаванию

Если за символом следует двоеточие, ожидается, что параметр будет иметь аргумент, который должен быть отделен от него пробелом. Двоеточие ( : ) (и знак вопроса ? ) Не могут быть использованы в качестве опций символов.

Каждый раз, когда он вызывается, getopts помещает следующий параметр в имя переменной оболочки, инициализирует имя, если оно не существует, и индекс следующего аргумента, который должен быть обработан в переменной OPTIND . OPTIND инициализируется до 1 каждом OPTIND оболочки или скрипта оболочки.

Когда опция требует аргумента, getopts помещает этот аргумент в переменную OPTARG . Оболочка не сбрасывает OPTIND автоматически; он должен быть сброшен вручную между несколькими вызовами в getopts в рамках одного и того же вызова оболочки, если будет использоваться новый набор параметров.

Когда встречается конец опций, getopts выходит с возвратным значением, большим нуля.

OPTIND устанавливается в индекс первого аргумента без аргумента, а для имени установлено значение ? , getopts обычно анализирует позиционные параметры, но если в args указано больше аргументов, getopts анализирует их.

getopts может сообщать об ошибках двумя способами. Если первый символ optstring является двоеточием ( : ), используются бесшумные сообщения об ошибках. При нормальной работе диагностические сообщения печатаются, когда встречаются недопустимые параметры или отсутствующие аргументы параметров.

Если для переменной OPTERR установлено значение 0 , сообщения об ошибках не будут отображаться, даже если первый символ optstring не является двоеточием.

Если отображается недопустимая опция, getopts места ? на name и, если не молчать, выводит сообщение об ошибке и отключает OPTARG . Если getopts работает, найденный символ опции помещается в OPTARG и никакое диагностическое сообщение не печатается.

Если требуемый аргумент не найден, а getopts не является тихим, знак вопроса ( ? ) Помещается в name , OPTARG , и OPTARG диагностическое сообщение. Если getopts молчит, затем двоеточие ( : ) помещаются в имени и OPTARG устанавливаются на символ опции.

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

Выход

$ ./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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow