research के कई दिनों के बाद, मैं अभी भी .sh स्क्रिप्ट में cmdline args को पार्स करने के लिए सबसे अच्छी विधि नहीं समझ सकता। मेरे संदर्भ के अनुसार getopts cmd के बाद से यह जाने का रास्ता है "स्थितीय पैरामीटर variables.Unexpected स्विच, या स्विच है कि बहस याद कर रहे हैं को परेशान किए बिना अर्क और चेक स्विच, मान्यता प्राप्त है और त्रुटियों reportedas कर रहे हैं।"बैश में कमांड लाइन का विश्लेषण करने का सबसे अच्छा तरीका है?
स्थितीय पैराम्स (एक्स 2 - $ @, $ #, आदि) स्पष्ट रूप से अच्छी तरह से काम नहीं करते हैं जब रिक्त स्थान शामिल होते हैं लेकिन नियमित और लंबे पैरामीटर (-पी और - लोंगपरम) को पहचान सकते हैं। मैंने देखा कि घोंसला वाले उद्धरणों के साथ पैरामीटर पारित करते समय दोनों विधियां विफल होती हैं ("यह उद्धरण" का एक एक्स है। ")। इन तीन कोड नमूने में से कौन सा सबसे अच्छा cmdline args से निपटने के तरीके को दिखाता है? गेटोप गुरु द्वारा अनुशंसित नहीं है, इसलिए मैं इसे टालने की कोशिश कर रहा हूं!
उदाहरण 1:
#!/bin/bash
for i in "[email protected]"
do
case $i in
-p=*|--prefix=*)
PREFIX=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
-s=*|--searchpath=*)
SEARCHPATH=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
-l=*|--lib=*)
DIR=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
;;
--default)
DEFAULT=YES
;;
*)
# unknown option
;;
esac
done
exit 0
उदाहरण 2:
#!/bin/bash
echo ‘number of arguments’
echo "\$#: $#"
echo ”
echo ‘using $num’
echo "\$0: $0"
if [ $# -ge 1 ];then echo "\$1: $1"; fi
if [ $# -ge 2 ];then echo "\$2: $2"; fi
if [ $# -ge 3 ];then echo "\$3: $3"; fi
if [ $# -ge 4 ];then echo "\$4: $4"; fi
if [ $# -ge 5 ];then echo "\$5: $5"; fi
echo ”
echo ‘using [email protected]’
let i=1
for x in [email protected]; do
echo "$i: $x"
let i=$i+1
done
echo ”
echo ‘using $*’
let i=1
for x in $*; do
echo "$i: $x"
let i=$i+1
done
echo ”
let i=1
echo ‘using shift’
while [ $# -gt 0 ]
do
echo "$i: $1"
let i=$i+1
shift
done
[/bash]
output:
bash> commandLineArguments.bash
number of arguments
$#: 0
using $num
$0: ./commandLineArguments.bash
using [email protected]
using $*
using shift
#bash> commandLineArguments.bash "abc def" g h i j*
उदाहरण 3:
#!/bin/bash
while getopts ":a:" opt; do
case $opt in
a)
echo "-a was triggered, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
exit 0
संभावित डुप्लिकेट [मैं बैश में कमांड लाइन तर्क कैसे पार्स करूं?] (Http://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash) –