수색…


통사론

  • getopts optstring 이름 [args]

매개 변수

매개 변수 세부 묘사
옵트 스트링 인식 할 옵션 문자
이름 그런 다음 구문 분석 된 옵션이 저장된 위치의 이름을 지정합니다.

비고

옵션

optstring : 인식 할 옵션 문자

문자 다음에 콜론이 오는 경우 옵션에는 인수가 있어야하며 공백으로 구분해야합니다. 콜론 ( : ) (와 물음표 ? ) 옵션을 문자로 사용할 수 없습니다.

호출 될 때마다 getopts 는 쉘 변수 이름에 다음 옵션을두고, 존재하지 않는 경우 이름을 초기화하고 변수 OPTIND 로 처리 할 다음 인수의 색인을 지정합니다. OPTIND 는 쉘 또는 쉘 스크립트가 호출 될 때마다 1 로 초기화됩니다.

옵션에 인수가 필요한 경우 getopts 는 해당 인수를 OPTARG 변수에 OPTARG . 쉘은 OPTIND 자동으로 재설정하지 않습니다. 새로운 매개 변수 집합이 사용될 경우 동일한 쉘 호출 내에서 getopts 에 대한 여러 호출 사이에서 수동으로 재설정해야합니다.

옵션의 끝에 getopts 하면, getopts 는 0보다 큰 리턴 값으로 종료합니다.

OPTIND 는 첫 번째 옵션이 아닌 인수의 색인으로 설정되며 name은 ? 으로 설정됩니다 ? . getopts 일반적으로 위치 매개 변수를 구문 분석하지만, args 더 많은 인수가 주어지면 getopts 는 대신 args 를 구문 분석합니다.

getopts 는 두 가지 방법으로 오류를보고 할 수 있습니다. 의 첫 번째 문자 경우 optstring (콜론입니다 : ), 자동 오류보고 사용됩니다. 정상적인 작동에서 유효하지 않은 옵션이나 누락 된 옵션 인수가 있으면 진단 메시지가 인쇄됩니다.

OPTERR 변수가 0 으로 설정되면 optstring 의 첫 번째 문자가 콜론이 아니더라도 오류 메시지가 표시되지 않습니다.

잘못된 옵션이 표시되면 getopts 가 위치 ?name 과, 침묵하지 않을 경우 에러 메시지를 출력하고 설정이 해제 OPTARG . getopts 가 조용한 경우 찾은 옵션 문자는 OPTARG 있으며 진단 메시지는 인쇄되지 않습니다.

필수 인수가없고 getopts 가 조용하지 않으면, 물음표 ( ? )가 namename 되고 OPTARG 는 설정 해제되며 진단 메시지가 인쇄됩니다. 경우 getopts 침묵하고, 다음에 콜론 ( : ) 이름에 배치되고 OPTARG 옵션 문자로 설정한다.

핑 간격

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