Bash- स्क्रिप्टला आर्ग्यूमेंट कसे द्यावे

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

आपण अशी एखादी Bash script लिहू शकता जेव्हा ती कमांड लाइनवरून स्क्रिप्टला म्हणतात तेव्हा निर्दिष्ट केलेले आर्ग्यूमेंट्स मिळतील. जेव्हा इनपुट स्कीममध्ये इनपुट पॅरामीटर्स (आर्ग्युमेंट्स) च्या मूल्यांवर अवलंबून थोडा वेगळा फंक्शन सुरू करायचा असतो तेव्हा ही पद्धत वापरली जाते.

उदाहरणार्थ, आपल्याकडे "stats.sh" नावाची एक स्क्रिप्ट असू शकेल जी एक फाइलवर विशिष्ट ऑपरेशन करेल, जसे की त्याचे शब्द मोजणे. आपण अनेक फाइल्सवर ती स्क्रिप्ट वापरण्यास सक्षम होऊ इच्छित असल्यास, फाइल नाव एक आर्ग्यूमेंट म्हणून देणे उत्तम आहे, ज्यामुळे आपण सर्व फाइल्सवर प्रक्रिया करण्यासाठी समान स्क्रिप्ट वापरू शकता. उदाहरणार्थ, प्रक्रिया केलेली फाइलचे नाव "गाणीसूची" असल्यास, आपण खालील आदेश ओळ प्रविष्ट कराल:

श stats.sh songlist

$ 1, $ 2, $ 3, इत्यादी व्हेरिएबल्सच्या सहाय्याने अदलाबदलीमध्ये प्रवेश केला जातो, जिथे $ 1 पहिल्या आर्ग्यूमेंटला संदर्भित करतो, $ 2 दुसऱ्या आर्ग्युमेंटसाठी, आणि अशीच. हे खालील उदाहरणामध्ये स्पष्ट केले आहे:

FILE1 = $ 1 wc $ FILE1

वाचनक्षमतेसाठी, पहिल्या अरिष्ट ($ 1) च्या मूल्यावर एक वर्णनात्मक नावाने एक वेरिएबल नियुक्त करा, आणि नंतर या चल ($ FILE1) वर शब्द गणना उपयुक्तता (डब्ल्यूसी) कॉल करा.

जर आपल्यामध्ये अरग्रेम्सची व्हेरिएबल संख्या असेल तर आपण "$ @" व्हेरिएबल वापरू शकता, जे सर्व इनपुट पॅरामीटर्सची एक ऍरे आहे. याचा अर्थ आपण पुढील उदाहरणांप्रमाणे स्पष्ट केल्याप्रमाणे for-loop वापरू शकता ते प्रत्येकावर प्रक्रिया करण्यासाठी:

"$ @" मध्ये FILE1 साठी wc $ FILE1 पूर्ण केले

कमांड लाईनवरून आर्ग्युमेंट्ससह स्क्रिप्ट कसे कॉल करायचे याचे उदाहरण येथे दिले आहे:

sh stats.sh songlist1 songlist2 songlist3

एखाद्या तर्काने स्थळ असल्यास, आपल्याला सिंगल कोट्स सह संलग्न करणे आवश्यक आहे. उदाहरणार्थ:

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

वारंवार स्क्रिप्ट असे लिहिले जाते की वापरकर्ता ध्वजांकनातून कोणत्याही ऑर्डरमध्ये आर्ग्यूमेंटस पास करू शकतो. झेंडे पद्धतीने, आपण काही वितर्क वैकल्पिक बनवू शकता.

समजा आपल्याकडे "वापरकर्तानाव", "तारीख" आणि "उत्पादन" यासारख्या निर्दिष्ट मापदंडांवर आधारित डेटाबेसची माहिती प्राप्त करणारी एक स्क्रिप्ट आहे आणि विशिष्ट "स्वरुपात" मध्ये अहवाल व्युत्पन्न करते. आता आपण आपली स्क्रिप्ट लिहू इच्छित आहात जेणेकरून स्क्रिप्टला म्हणतात तेव्हा आपण या पॅरामीटर्समध्ये पास करू शकता. हे कदाचित यासारखे दिसू शकते:

मेकरेपोर्ट -यू जेस्मिथ-पी नोटबुक- डी 10-20-2011 -f पीडीएफ

Bash "getopts" कार्यासह या कार्यक्षमतेस सक्षम करते. वरील उदाहरणासाठी आपण पुढील गोष्टींचा लाभ घेऊ शकता:

हे "गेप्स" फंक्शनल आणि तथाकथित "ऑप्टस्ट्रिंग" वापरणारे एक -लूप आहे, या प्रकरणात "u: d: p: f:", आर्ग्युमेंट्समधून फिरणे. तर-लूप ऑप्स्ट्रींग द्वारे चालते, ज्यामध्ये आर्ग्युमेंटस पास करण्यासाठी वापरला जाणारा झेंडे आणि व्हेरिएबल "पर्याया" मध्ये त्या ध्वजसाठी प्रदान केलेले अर्ग्युमेंट मूल्य प्रदान करते. नंतर केस-स्टेटमेंट ग्लोबल वेरियेबलमध्ये व्हेरिएबल "option" ची व्हॅल्यू देतात जे सर्व अर्ग्युमेंट वाचले गेल्यानंतर वापरले जाऊ शकते.

ऑप्स्ट्रिंगमधील कॉलन्सचा अर्थ असा असतो की संबंधित ध्वजांसाठी मूल्य आवश्यक आहे. वरील उदाहरणामध्ये सर्व झेंडे एका अपूर्ण मागे घेतात: "u: d: p: f:". याचा अर्थ सर्व ध्वजांना मूल्य आवश्यक आहे. उदाहरणार्थ, "डी" आणि "एफ" ध्वजांकनाची किंमत असण्याची शक्यता नाही, तर ऑप्टस्ट्रिंग "u: dp: f" असेल.

ऑप्टस्ट्रिंगच्या सुरुवातीस एक कोलन, उदाहरणार्थ ": u: d: p: f:", त्याचा पूर्ण अर्थ वेगळा आहे. हे आपण ज्या ध्वजांचे प्रतिनिधित्व करीत आहात ते ऑप्टस्ट्रिन्गमध्ये हाताळण्याची अनुमती देते. त्या बाबतीत "option" variable ची व्हॅल्यू "?" आणि "OPTARG" चे मूल्य अनपेक्षित ध्वज वर सेट आहे आपण वापरकर्त्याच्या चुकांची माहिती देण्यास योग्य त्रुटी संदेश दर्शविण्यास अनुमती देतो.

झेंडा द्वारे अग्रेसर न केलेल्या वितर्कांना getopts द्वारे दुर्लक्ष केले जाते. स्क्रिप्ट म्हटल्या गेल्यास ऑप्स्ट्रिंग मध्ये विनिर्दिष्ट ध्वजांकरीता प्रदान केले जात नाही तर काहीच होणार नाही, जोपर्यंत आपण विशेषतः हा कोड आपल्या कोडमध्ये हाताळू शकत नाही. Getops द्वारे हाताळलेले कोणतेही वितर्क अद्याप $ 1, $ 2, इ. व्हेरिएबल्ससह कॅप्चर केले जाऊ शकतात.