यह ट्यूटोरियल बताता है कि अपनी बैश स्क्रिप्ट में कमांड-लाइन तर्क कैसे पास करें। आरंभ करने में आपकी सहायता के लिए कई उदाहरण शामिल हैं।
बैश/शैल स्क्रिप्ट आपके लिनक्स वर्कफ़्लो को स्वचालित करने और अपने कार्यदिवस को तेज़ करने का एक शानदार तरीका है ताकि आप कार्यालय को जल्दी छोड़ सकें (या शाम 5 बजे तक सर्वर रूम में छुपाएं)।
स्क्रिप्ट को फिर से उपयोग करने योग्य बनाना उन्हें और अधिक उपयोगी बनाता है - आपको ऐसी स्क्रिप्ट लिखने की आवश्यकता नहीं है जो अलग-अलग जानकारी के लिए या अलग-अलग दिनों में एक ही कार्य करती है - आप एक ही स्क्रिप्ट का पुन:उपयोग कर सकते हैं और अलग-अलग पैरामीटर<प्रदान कर सकते हैं। /em> - कमांड लाइन के माध्यम से स्क्रिप्ट को दिए गए निर्देश। इसे कभी-कभी कमांड लाइन का उपयोग करने के रूप में भी जाना जाता है तर्क ।
उदाहरण के लिए, आपके पास एक स्क्रिप्ट हो सकती है जो किसी फ़ाइल में कुछ टेक्स्ट आउटपुट करती है। यदि आप फ़ाइल का नाम बदलना चाहते हैं, तो आपको स्क्रिप्ट संपादित करनी होगी। यदि आप चाहते हैं कि स्क्रिप्ट कई फाइलों में आउटपुट हो, तो आपको स्क्रिप्ट की कई प्रतियों की आवश्यकता हो सकती है। मापदंडों का उपयोग करके, आपके पास एक एकल स्क्रिप्ट हो सकती है जो किसी भी नाम से, किसी भी नाम से, पैरामीटर के रूप में पारित की गई फ़ाइलों की संख्या को आउटपुट कर सकती है कमांड लाइन से।
इन पैरामीटरों . को पास करने के कुछ अलग तरीके हैं - विकल्प और उनके मूल्य - आप जो हासिल करने की कोशिश कर रहे हैं उसके आधार पर आपकी स्क्रिप्ट के लिए। यहां कुछ तरीके दिए गए हैं, उदाहरण के साथ:
द गेटटॉप्स / कमांड लाइन इनपुट पढ़ने की फ्लैग विधि
- गेटटॉप्स एक शेल कमांड है जो विकल्प . को पुनः प्राप्त करता है (या झंडे ) कमांड लाइन इनपुट से और उनका मान . बनाता है (या तर्क ) आपकी स्क्रिप्ट में उपयोग के लिए उपलब्ध है
- विकल्प एक अक्षर होते हैं जिसके पहले a – (डैश) होता है, उसके बाद पास होने वाला मान होता है, जैसे -v मान
- जब ऑर्डर कोई मायने नहीं रखता तब सबसे अच्छा उपयोग किया जाता है
- शायद यहां सूचीबद्ध सभी विधियों में से सर्वश्रेष्ठ
गेटटॉप्स बैश स्क्रिप्ट उदाहरण
यह उदाहरण स्क्रिप्ट फास्ट-फूड ऑर्डर के लिए तीन विकल्प लेता है:
- -o आदेश . के लिए
- -s आकार . के लिए
- -d पीने . के लिए
fastFoodOrder.sh
#!/bin/bash # Use a while loop to parse through the options o, s, d while getopts o:s:d: flag do # Match each option (which has been assigned to the $flag variable) to it's meaning using a case statement block # OPTARG will be the value received from getopts for the corresponding option and is assigned to a variable depending on the flag case "${flag}" in o) order=${OPTARG};; s) size=${OPTARG};; d) drink=${OPTARG};; esac done # The values as passed to the options are now available in their corresponding variable echo "Order: $order"; echo "Size: $size"; echo "Drink: $drink";
#!/bin/bash . के बारे में अधिक जानने के लिए यहां क्लिक करें बैश स्क्रिप्ट की शुरुआत में लाइन।
इसे चलाने के लिए, निम्नलिखित दर्ज करें:
bash ./fastFoodOrder.sh -d Cola -o 'Fish Burger Meal' -s Large
जिसके परिणामस्वरूप स्क्रिप्ट आउटपुट होगी:
Order: Fish Burger Meal Size: Large Drink: Cola
जैसा कि आप उपरोक्त आउटपुट में देख सकते हैं - जिस क्रम में विकल्पों की आपूर्ति की गई थी, वह मायने नहीं रखता था।
स्क्रिप्ट निष्पादित करते समय ./ का उपयोग क्यों किया जाता है?
एक ही विकल्प में एकाधिक मान पास करना
एकाधिक मानों के लिए एक विकल्प को कई बार पास करना भी संभव है - फिर वे स्क्रिप्ट में एक सरणी के रूप में उपलब्ध होंगे।
यह एक विकल्प में कई मानों को पास करने का सबसे अच्छा तरीका है क्योंकि यह किसी भी चरित्र को मूल्य में उपयोग करने की अनुमति देता है - मूल्यों को उद्धरणों में पास करने या एक सीमांकक का उपयोग करने से यह सीमित हो जाएगा।
fastFoodOrderExtras.sh
#!/bin/bash # Use a while loop to parse through the options o, s, d, e while getopts o:s:d:e: flag do # Match each option (which has been assigned to the $flag variable) to it's meaning using a case statement block # OPTARG will be the value received from getopts for the corresponding option and is assigned to a variable depending on the flag case "${flag}" in o) order=${OPTARG};; s) size=${OPTARG};; d) drink=${OPTARG};; e) extras+=${OPTARG};;# Create or append an array variable to hold the multiple extras values passed esac done # The values as passed to the options are now available in their corresponding variable echo "Order: $order"; echo "Size: $size"; echo "Drink: $drink"; echo "The list of extras is '${extras[@]}'" # Loop through the multiple extras values for val in "${extras[@]}"; do echo $val done
उपरोक्त स्क्रिप्ट एकाधिक -e . स्वीकार करती है अतिरिक्त जोड़ने के विकल्प, जैसा कि नीचे देखा गया है:
bash ./fastFoodOrderExtras.sh -d Cola -o 'Fish Burger Meal' -s Large -e Sauce -e Salt -e Pepper
स्क्रिप्ट आउटपुट होगी:
Order: Fish Burger Meal Size: Large Drink: Cola The list of extras is 'SauceSaltPepper' SauceSaltPepperहै
स्क्रिप्ट में स्थितीय पैरामीटर का उपयोग करना
- इसका उपयोग तब किया जाता है जब किसी विशिष्ट क्रम में ज्ञात संख्या में तर्क/पैरामीटर होंगे
- सरल स्क्रिप्ट के लिए सबसे अच्छा उपयोग किया जाता है
उदाहरण
fastFoodOrder.sh
#!/bin/bash echo "Order: $1"; echo "Size: $2"; echo "Drink: $3";
इसे चलाने के लिए, निम्नलिखित दर्ज करें:
bash ./fastFoodOrder.sh 'Fish Burger Meal' Large Cola
जिसके परिणामस्वरूप स्क्रिप्ट आउटपुट होगी:
Order: Fish Burger Meal Size: Large Drink: Cola
ध्यान दें कि यदि विकल्प क्रम से बाहर दिए गए थे, तो सभी मान मिश्रित हो जाएंगे। इस पद्धति का उपयोग करके स्थिति मायने रखती है!
bash ./fastFoodOrder.sh 'Fish Burger Meal' Cola Large
परिणामस्वरूप मान गलत तरीके से असाइन किए जा रहे हैं:
Order: Fish Burger Meal Size: Cola Drink: Large
कमांड लाइन पैरामीटर्स को पढ़ने के लिए लूप्स का उपयोग करना
- सबसे अच्छा उपयोग तब किया जाता है जब विकल्पों/तर्कों की संख्या पहले से ज्ञात न हो
- उदाहरण के लिए, हो सकता है कि आप किसी रेसिपी के लिए सामग्री की सूची दे रहे हों
- यह बिल्ट-इन वैरिएबल का उपयोग करता है [email protected], जिसमें उपयोगकर्ता द्वारा आपूर्ति किए गए सभी इनपुट विकल्पों की एक सरणी होती है
उदाहरण
recipe.sh
#!/bin/bash i=1; # This value is the iterator value - the current number of loops that have completed for ingredient in "[email protected]" # loop through [email protected] which is an array of all passed input parameters do echo "Ingredient number $i is $ingredient";# Print the $ingredient which was passed to the script when it was called i=$((i + 1)); # Increment the iterator value so we know how many times we have looped done
इसे चलाएं:
sh ./recipe.sh bread lettuce cheese hamburger
जो आउटपुट करेगा:
Ingredient number 1 is bread Ingredient number 2 is lettuce Ingredient number 3 is cheese Ingredient number 4 is hamburger