2012-07-01 12 views
27

क्या कई विकल्पों को एक साथ संसाधित करने के लिए गेटोपेट का उपयोग करना संभव है? उदाहरण के लिए, myscript -iR या myscript -irv।एकाधिक और अनिवार्य विकल्पों के साथ बैश गेटोपेट

इसके अलावा, मेरे पास एक ऐसी स्थिति है जहां एक शर्त स्क्रिप्ट के आधार पर अनिवार्य विकल्प की आवश्यकता होगी। उदाहरण के लिए, यदि स्क्रिप्ट के लिए तर्क एक निर्देशिका है, तो मुझे किसी अन्य विकल्प के साथ -R या -r विकल्प निर्दिष्ट करना होगा (myscript -iR mydir या myscript -ir mydir या myscript -i -r mydir या myscript -i -R mydir), केवल फ़ाइल के मामले में -i पर्याप्त है (myscript -i myfile)।

मैंने खोज करने की कोशिश की लेकिन मुझे कोई जवाब नहीं मिला।

उत्तर

73

आप अपने द्वारा प्रदान किए जाने वाले विकल्पों को जोड़ सकते हैं और getopts उन्हें अलग कर देंगे। आपके case कथन में आप प्रत्येक विकल्प को व्यक्तिगत रूप से संभाल लेंगे।

विकल्प देखने पर आप ध्वज सेट कर सकते हैं और सुनिश्चित कर सकते हैं कि getopts लूप पूरा हो जाने के बाद अनिवार्य "विकल्प" (!) मौजूद हैं।

#!/bin/bash 
rflag=false 
small_r=false 
big_r=false 

usage() { echo "How to use"; } 

options=':ij:rRvh' 
while getopts $options option 
do 
    case $option in 
     i ) i_func;; 
     j ) j_arg=$OPTARG;; 
     r ) rflag=true; small_r=true;; 
     R ) rflag=true; big_r=true;; 
     v ) v_func; other_func;; 
     h ) usage; exit;; 
     \?) echo "Unknown option: -$OPTARG" >&2; exit 1;; 
     : ) echo "Missing option argument for -$OPTARG" >&2; exit 1;; 
     * ) echo "Unimplemented option: -$OPTARG" >&2; exit 1;; 
    esac 
done 

shift $(($OPTIND - 1)) 

if ! $rflag && [[ -d $1 ]] 
then 
    echo "-r or -R must be included when a directory is specified" >&2 
    exit 1 
fi 

यह एक getopts समारोह की एक पूरी संदर्भ कार्यान्वयन का प्रतिनिधित्व करता है, लेकिन केवल एक बड़ा स्क्रिप्ट का एक स्केच है:

यहाँ एक उदाहरण है।

+1

बहुत धन्यवाद डेनिस। जैसा कि आपने सुझाव दिया है मैंने झंडे का उपयोग किया है। मैंने विकल्प को संयोजित करके तर्क को सरल बनाने और उन्हें एक चर में संग्रहीत करने और बाद में उपलब्ध विकल्पों के आधार पर प्रसंस्करण करने की कोशिश की। –

+0

@ रमेशसमैन: आपका स्वागत है। अगर आपको मेरा उत्तर उपयोगी लगता है, तो कृपया इसे स्वीकार के रूप में चिह्नित करें। –

+0

मैंने पहले ही कोशिश की है लेकिन संदेश प्राप्त करने के लिए "वोट अप 15 प्रतिष्ठा की आवश्यकता है"। हालांकि मैंने प्रश्न के लिए धागे के नीचे "हां" पर क्लिक किया था, "क्या यह पोस्ट आपके लिए उपयोगी था?" और संदेश "आपकी प्रतिक्रिया के लिए धन्यवाद" मिला। –

संबंधित मुद्दे