बैश-स्क्रिप्ट के लिए तर्क कैसे पास करें

आदेश, वाक्यविन्यास और उदाहरण

आप एक बैश स्क्रिप्ट लिख सकते हैं जैसे कि स्क्रिप्ट को कमांड लाइन से कॉल करते समय निर्दिष्ट तर्क प्राप्त होते हैं। इस विधि का उपयोग तब किया जाता है जब किसी स्क्रिप्ट को इनपुट पैरामीटर (तर्क) के मानों के आधार पर थोड़ा अलग फ़ंक्शन करना पड़ता है।

उदाहरण के लिए, आपके पास "stats.sh" नामक एक स्क्रिप्ट हो सकती है जो फ़ाइल पर एक विशेष ऑपरेशन करता है, जैसे कि इसके शब्दों की गणना करना। यदि आप कई फ़ाइलों पर उस स्क्रिप्ट का उपयोग करने में सक्षम होना चाहते हैं, तो फ़ाइल नाम को तर्क के रूप में पास करना सबसे अच्छा है, ताकि आप सभी फ़ाइलों को संसाधित करने के लिए उसी स्क्रिप्ट का उपयोग कर सकें। उदाहरण के लिए, यदि फ़ाइल का नाम संसाधित किया जाना है तो "गीतसूची" है, तो आप निम्न कमांड लाइन दर्ज करेंगे:

sh figures.sh गीतसूची

चर $ 1, $ 2, $ 3 इत्यादि का उपयोग करके स्क्रिप्ट के अंदर तर्कों का उपयोग किया जाता है, जहां $ 1 पहले तर्क को संदर्भित करता है, दूसरे तर्क के लिए $ 2, और इसी तरह। यह निम्नलिखित उदाहरण में दिखाया गया है:

FILE1 = $ 1 wc $ FILE1

पठनीयता के लिए, पहले वर्ण ($ 1) के मान पर एक वर्णनात्मक नाम के साथ एक चर निर्दिष्ट करें, और उसके बाद इस चर ($ FILE1) पर शब्द गणना उपयोगिता ( wc ) को कॉल करें।

यदि आपके पास तर्कों की एक चर संख्या है, तो आप "$ @" चर का उपयोग कर सकते हैं, जो सभी इनपुट पैरामीटर की एक सरणी है। इसका अर्थ यह है कि आप प्रत्येक उदाहरण को सचित्र रूप से संसाधित करने के लिए फॉर-लूप का उपयोग कर सकते हैं, जैसा कि निम्न उदाहरण में दिखाया गया है:

FILE1 के लिए "$ @" में wc $ FILE1 किया गया है

कमांड लाइन से तर्कों के साथ इस स्क्रिप्ट को कॉल करने का उदाहरण यहां दिया गया है:

sh figures.sh songlist1 songlist2 songlist3

यदि किसी तर्क में रिक्त स्थान हैं, तो आपको इसे सिंगल कोट्स के साथ संलग्न करना होगा। उदाहरण के लिए:

sh stats.sh 'गीतसूची 1' 'गीतसूची 2' 'गीतसूची 3'

अक्सर एक स्क्रिप्ट लिखी जाती है कि उपयोगकर्ता झंडे का उपयोग करके किसी भी क्रम में तर्कों में गुजर सकता है। झंडे विधि के साथ, आप कुछ तर्क वैकल्पिक भी बना सकते हैं।

मान लें कि आपके पास एक स्क्रिप्ट है जो निर्दिष्ट पैरामीटर, जैसे "उपयोगकर्ता नाम", "दिनांक" और "उत्पाद" के आधार पर डेटाबेस से जानकारी पुनर्प्राप्त करती है, और एक निर्दिष्ट "प्रारूप" में एक रिपोर्ट उत्पन्न करती है। अब आप अपनी स्क्रिप्ट लिखना चाहते हैं ताकि जब आप स्क्रिप्ट कहलाते हैं तो आप इन पैरामीटर में पास कर सकते हैं। यह ऐसा दिखाई दे सकता है:

makereport -u jsmith -p नोटबुक-डी 10-20-2011 -f पीडीएफ

बैश "कार्यक्षमता" फ़ंक्शन के साथ इस कार्यक्षमता को सक्षम बनाता है। उपर्युक्त उदाहरण के लिए, आप निम्नानुसार गेटोपेट का उपयोग कर सकते हैं:

यह एक समय-लूप है जो "गेटोपेट्स" फ़ंक्शन और तथाकथित "ऑप्टस्ट्रिंग" का उपयोग करता है, इस मामले में "u: d: p: f:", तर्कों के माध्यम से पुनरावृत्त करने के लिए। जबकि-लूप ऑप्टस्ट्रिंग के माध्यम से चलता है, जिसमें झंडे होते हैं जिनका प्रयोग तर्क पारित करने के लिए किया जा सकता है, और उस ध्वज के लिए दिए गए तर्क मान को चर "विकल्प" में निर्दिष्ट करता है। केस-स्टेटमेंट फिर वैरिएबल "ऑप्शन" का वैल्यू वैल्यू वैरिएबल को असाइन करता है जो सभी तर्कों को पढ़ने के बाद उपयोग किया जा सकता है।

ऑप्टस्ट्रिंग में कोलन का मतलब है कि संबंधित झंडे के लिए मूल्यों की आवश्यकता होती है। उपर्युक्त उदाहरण में सभी ध्वज एक कोलन द्वारा पीछा किया जाता है: "यू: डी: पी: एफ:"। इसका मतलब है, सभी झंडे को एक मूल्य की आवश्यकता है। यदि, उदाहरण के लिए, "डी" और "एफ" झंडे की कीमत होने की उम्मीद नहीं थी, तो ऑप्टस्ट्रिंग "यू: डीपी: एफ" होगी।

ऑप्टस्ट्रिंग की शुरुआत में एक कोलन, उदाहरण के लिए ": यू: डी: पी: एफ:", का एक अलग अर्थ है। यह आपको झंडे को संभालने की अनुमति देता है जो ऑप्टस्ट्रिंग में प्रदर्शित नहीं होते हैं। उस स्थिति में "विकल्प" चर का मान "?" पर सेट है और "OPTARG" का मान अप्रत्याशित ध्वज पर सेट है। आपको गलती के उपयोगकर्ता को सूचित करने में एक उपयुक्त त्रुटि संदेश प्रदर्शित करने की अनुमति देता है।

झंडे से पहले नहीं होने वाले तर्क गेटोपेट द्वारा अनदेखा किए जाते हैं। यदि ऑप्टिस्ट्रिंग में निर्दिष्ट झंडे प्रदान नहीं किए जाते हैं, जब स्क्रिप्ट को बुलाया जाता है, तब तक कुछ भी नहीं होता है, जब तक कि आप विशेष रूप से अपने कोड में इस मामले को संभाल नहीं लेते। गेट्स द्वारा नियंत्रित नहीं किए गए किसी भी तर्क को अभी भी नियमित $ 1, $ 2, आदि चर के साथ कैद किया जा सकता है।