Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

शेल/बैश लिपियों में कमांड लाइन तर्क [ट्यूटोरियल]

यह ट्यूटोरियल बताता है कि अपनी बैश स्क्रिप्ट में कमांड-लाइन तर्क कैसे पास करें। आरंभ करने में आपकी सहायता के लिए कई उदाहरण शामिल हैं।

बैश/शैल स्क्रिप्ट आपके लिनक्स वर्कफ़्लो को स्वचालित करने और अपने कार्यदिवस को तेज़ करने का एक शानदार तरीका है ताकि आप कार्यालय को जल्दी छोड़ सकें (या शाम 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

कमांड लाइन पैरामीटर्स को पढ़ने के लिए लूप्स का उपयोग करना

  • सबसे अच्छा उपयोग तब किया जाता है जब विकल्पों/तर्कों की संख्या पहले से ज्ञात न हो
    • उदाहरण के लिए, हो सकता है कि आप किसी रेसिपी के लिए सामग्री की सूची दे रहे हों
  • यह बिल्ट-इन वैरिएबल का उपयोग करता है admin@wsxdn.com, जिसमें उपयोगकर्ता द्वारा आपूर्ति किए गए सभी इनपुट विकल्पों की एक सरणी होती है

उदाहरण

recipe.sh

#!/bin/bash

i=1; # This value is the iterator value - the current number of loops that have completed

for ingredient in "admin@wsxdn.com" # loop through admin@wsxdn.com 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

  1. लिनक्स में सरल शैल स्क्रिप्ट कैसे बनाएं

    शेल स्क्रिप्ट बनाना सबसे आवश्यक कौशलों में से एक है जो लिनक्स उपयोगकर्ताओं के पास अपनी उंगलियों की नोक पर होना चाहिए। शेल स्क्रिप्ट दोहराए जाने वाले कार्यों को स्वचालित करने में एक बहुत बड़ी भूमिका निभाते हैं जो अन्यथा लाइन दर लाइन थकाऊ निष्पादन होगा। इस ट्यूटोरियल में, हम कुछ बुनियादी शेल स्क्रिप्

  1. लिनक्स में प्रभावी बैश स्क्रिप्ट लिखने के लिए 10 उपयोगी टिप्स

    शेल स्क्रिप्टिंग प्रोग्रामिंग का सबसे आसान रूप है जिसे आप लिनक्स में सीख सकते हैं/कर सकते हैं। इसके अलावा, यह सिस्टम प्रशासन के लिए कार्यों को स्वचालित करने, नई सरल उपयोगिताओं/उपकरणों को विकसित करने के लिए एक आवश्यक कौशल है, लेकिन कुछ का उल्लेख करने के लिए। इस लेख में, हम प्रभावी और विश्वसनीय बैश स

  1. विंडोज 10 [ट्यूटोरियल] पर बैश (लिनक्स शेल) को कैसे स्थापित और उपयोग करें

    यहां बताया गया है कि विंडोज़ पर लिनक्स शेल को कैसे सेट अप करें और उसका उपयोग कैसे करें - लिनक्स के लिए विंडोज सबसिस्टम का उपयोग करके (WSL )। यह ट्यूटोरियल 2020 से विंडोज 10 के अप-टू-डेट वर्जन के लिए है। मैं विंडोज 10 के पुराने संस्करणों या विंडोज 8/7/XP/3.1 के अन्य तरीकों पर WSL का उपयोग करने के त