बैश स्क्रिप्ट में कमांड लाइन तर्कों को कैसे संभालें?

How Handle Command Line Arguments Bash Script



कई मामलों में, स्क्रिप्ट को इनपुट विकल्प प्रदान करने के लिए बैश स्क्रिप्ट को तर्क मानों की आवश्यकता होती है। आप बैश स्क्रिप्ट में कमांड लाइन तर्कों को दो तरीकों से संभाल सकते हैं। एक का उपयोग कर रहा है तर्क चर और दूसरा उपयोग कर रहा है गेटटॉप्स समारोह। आप कमांड लाइन तर्कों को कैसे संभाल सकते हैं इस ट्यूटोरियल में दिखाया गया है।

तर्क चर का उपयोग करना:

तर्क चर $0 से शुरू होता है। मुख्य स्क्रिप्ट फ़ाइल नाम $0 में संग्रहीत है जो कमांड लाइन तर्कों से तर्क मान प्राप्त करता है। यदि कमांड लाइन में दो तर्क पारित किए जाते हैं तो तर्क मान क्रमशः $1 और $2 चर में प्राप्त होंगे।







उदाहरण -1: तीन संख्यात्मक मानों को तर्क के रूप में भेजना

एक बैश फ़ाइल बनाएँ और निम्न कोड जोड़ें। स्क्रिप्ट तीन तर्क मान प्राप्त करेगी और $1, $2 और $3 में संग्रहीत करेगी। यह तर्कों की कुल संख्या की गणना करेगा, लूप के साथ और बिना लूप के तर्क मानों को प्रिंट करेगा। अंत में, सभी तर्क मानों का योग प्रिंट करें।



#!/बिन/बैश

# तर्कों की कुल संख्या गिनना
फेंक दिया 'तर्कों की कुल संख्या: $#'

# तर्क मूल्यों को अलग-अलग पढ़ना
फेंक दिया 'पहला तर्क मान: $1'
फेंक दिया 'दूसरा तर्क मान: $2'
फेंक दिया 'तीसरा तर्क मान: $3'

# लूप का उपयोग करके तर्क मान पढ़ना
के लियेargvalमें ' [ईमेल संरक्षित]'
करना
फेंक दिया -एन '$argval'
किया हुआ

# तर्क मान जोड़ना
योग= $(($ 1+$ 2+$3))

#परिणाम प्रिंट करें
फेंक दिया -और 'एनयोग का परिणाम =$सम'

बैश फ़ाइल को तीन संख्यात्मक तर्क मानों के साथ चलाएँ।



$दे घुमा केcmdline1.shपचास 35 पंद्रह





उदाहरण -2: फ़ाइल नाम को तर्क के रूप में लेना

एक बैश फ़ाइल बनाएँ और किसी भी फ़ाइल के वर्णों की कुल संख्या गिनने के लिए निम्न कोड जोड़ें। यहां, फ़ाइल नाम को कमांड लाइन तर्क के रूप में पारित किया जाएगा।

#!/बिन/बैश
फ़ाइल का नाम=$ 1
टोटलचर=``स्वागत -सी $फ़ाइलनाम``
फेंक दिया 'अक्षरों की कुल संख्या हैं$ कुलचर'

फ़ाइल नाम के साथ बैश स्क्रिप्ट को एकल तर्क मान के रूप में चलाएँ और उस फ़ाइल के वर्णों की कुल संख्या की जाँच करने के लिए एक और कमांड चलाएँ। यहाँ, Employee.txt फ़ाइल का उपयोग तर्क मान के रूप में किया जाता है। कर्मचारी.txt फ़ाइल के वर्णों की कुल संख्या 204 है।



$दे घुमा केcmdline2.sh कर्मचारी.txt
$स्वागत -सीकर्मचारी.txt

गेटोप्स फ़ंक्शन का उपयोग करना:

यदि आप डेटाबेस या किसी फ़ाइल में डेटा स्टोर करना चाहते हैं या कमांड लाइन तर्क मूल्यों के आधार पर विशेष प्रारूप पर एक रिपोर्ट बनाना चाहते हैं तो गेटटॉप्स कार्य करने के लिए फ़ंक्शन सबसे अच्छा विकल्प है। यह एक अंतर्निहित लिनक्स फ़ंक्शन है। तो, आप कमांड लाइन से स्वरूपित डेटा को पढ़ने के लिए आसानी से अपनी स्क्रिप्ट में इस फ़ंक्शन का उपयोग कर सकते हैं।

उदाहरण -1: getopts फ़ंक्शन द्वारा तर्क पढ़ना

एक बैश फ़ाइल बनाएँ और इसके उपयोग को समझने के लिए निम्न स्क्रिप्ट जोड़ें गेटटॉप्स समारोह। कमांड लाइन तर्क विकल्पों और तर्क मूल्यों को पढ़ने के लिए लूप के साथ 'गेटटॉप्स' फ़ंक्शन का उपयोग किया जाता है। यहाँ पर 4 Option का प्रयोग किया गया है जो कि 'मैं', 'एन', 'एम' तथा 'और' . केस स्टेटमेंट का उपयोग विशेष विकल्प से मेल खाने और तर्क मान को एक चर में संग्रहीत करने के लिए किया जाता है। अंत में, वेरिएबल के मान प्रिंट करें।

#!/बिन/बैश
जबकि गेटटॉप्स ':मुझ मे:'गुस्सा;करना
मामला $ arg में
मैं) पहचान=$OPTARG;;
एन) नाम=$OPTARG;;
एम) निर्माण की तारीख=$OPTARG;;
और) समाप्त होने की तिथि=$OPTARG;;
esac
किया हुआ
फेंक दिया -और 'एन$आईडी $नाम $Manufacturing_date $एक्सपायर_डेटएन'

फ़ाइल को निम्न विकल्पों और तर्क मानों के साथ चलाएँ। यहाँ, p100 -i विकल्प का मान है, 'हॉट केक' -n विकल्प का मान है, '01-01-2018′ -m विकल्प का मान है और '06-01-2018′ का मान है - ई विकल्प।

$दे घुमा केcmdline3.sh-मैंp001-एन 'हॉट केक' -एम '01 -01-2018' -और '06 -01-2018'

जब आपको किसी स्क्रिप्ट में सरल मान भेजने की आवश्यकता होती है तो तर्क चर का उपयोग करना बेहतर होता है। लेकिन अगर आप स्वरूपित तरीके से डेटा भेजना चाहते हैं तो तर्क मानों को पुनः प्राप्त करने के लिए getopts फ़ंक्शन का उपयोग करना बेहतर है। अधिक जानकारी के लिए देखें वीडियो !