Bash
getopts: स्मार्ट स्थिति-पैरामीटर पार्सिंग
खोज…
वाक्य - विन्यास
- गेटटॉप्स नाम रखने का विकल्प [args]
पैरामीटर
पैरामीटर | विस्तार |
---|---|
optstring | मान्यता प्राप्त करने के लिए विकल्प वर्ण |
नाम | फिर नाम जहाँ पार्स विकल्प संग्रहीत किया जाता है |
टिप्पणियों
विकल्प
optstring
: मान्यता प्राप्त करने के लिए विकल्प वर्णयदि किसी वर्ण का बृहदान्त्र द्वारा अनुसरण किया जाता है, तो विकल्प में एक तर्क होने की अपेक्षा की जाती है, जिसे श्वेत स्थान से अलग किया जाना चाहिए। पेट (
:
) (और प्रश्न चिह्न?
) विकल्प पात्रों के रूप में इस्तेमाल नहीं किया जा सकता है।
जब भी इसे लागू किया जाता है, getopts
अगले विकल्प को शेल वैरिएबल नाम में रखता है, नाम को इनिशियलाइज़ करता है यदि यह मौजूद नहीं है, और अगले ऑप्शन के इंडेक्स को वेरिएबल OPTIND
में प्रोसेस किया जाता है। OPTIND
को प्रत्येक बार शेल या शेल स्क्रिप्ट के 1
बार प्रारंभ करने के लिए प्रारंभ किया जाता है।
जब किसी विकल्प के लिए तर्क की आवश्यकता होती है, getopts
उस तर्क को चर OPTARG
। खोल में रीसेट नहीं होता OPTIND
स्वचालित रूप से; यह करने के लिए अधिक कॉल के बीच मैन्युअल रूप से रीसेट करना होगा getopts
ही खोल मंगलाचरण के भीतर यदि मानकों का एक नया सेट में इस्तेमाल किया जा रहा है।
जब विकल्पों का अंत होता है, तो getopts
शून्य से अधिक रिटर्न वैल्यू के साथ बाहर निकलता है।
पहला गैर-विकल्प तर्क के सूचकांक में OPTIND
सेट है, और नाम ?
सेट है ?
। getopts
सामान्य रूप से स्थितीय मापदंडों को पार्स करता है, लेकिन अधिक बहस में दिया जाता है, तो args
, getopts
उन बजाय पार्स करता है।
getopts
दो तरह से त्रुटियों की रिपोर्ट कर सकता है। का पहला वर्ण हैं optstring
(एक कॉलन है :
), मूक त्रुटि रिपोर्टिंग किया जाता है। सामान्य ऑपरेशन में नैदानिक संदेश तब प्रिंट किए जाते हैं जब अमान्य विकल्प या लापता विकल्प तर्क सामने आते हैं।
यदि वेरिएबल OPTERR
0
सेट है, तो कोई त्रुटि संदेश प्रदर्शित नहीं होगा, भले ही optstring
का पहला वर्ण कोई कोलन न हो।
यदि कोई अमान्य विकल्प दिखाई देता है, getopts
स्थान getopts
हैं ?
name
और, यदि चुप नहीं है, तो एक त्रुटि संदेश प्रिंट करता है और OPTARG को OPTARG
। यदि getopts
चुप है, तो पाया गया विकल्प वर्ण OPTARG
में रखा गया है और कोई नैदानिक संदेश नहीं छपा है।
यदि एक आवश्यक तर्क नहीं मिला है, और getopts
चुप नहीं है, तो एक प्रश्न चिह्न ( ?
) name
रखा गया है, 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]