Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

लिनक्स शेल स्क्रिप्टिंग: वेरिएबल्स पर गहन नज़र – भाग 9

हम पहले ही लिनक्स शेल स्क्रिप्टिंग पर लेखों की एक श्रृंखला लिख चुके हैं जिसे उस समय बहुत सराहा गया था और यह आज भी उतना ही प्रासंगिक है। शेल स्क्रिप्टिंग पर लेखों के संग्रह का लिंक यहां दिया गया है।

  1. लिनक्स शेल स्क्रिप्टिंग सीखें

इस लेख में हम वेरिएबल्स, उनके निष्पादन और शेल स्क्रिप्ट में उनके कार्यान्वयन को देखेंगे।

लिनक्स शेल स्क्रिप्टिंग: वेरिएबल्स पर गहन नज़र – भाग 9

आउटपुट सहेजना

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

स्क्रिप्टिंग भाषा में वेरिएबल्स

वेरिएबल्स शेल स्क्रिप्टिंग में उपयोग किया जाने वाला एक महत्वपूर्ण घटक है और इसे बैश कमांड "Declare" का उपयोग करके घोषित किया जाता है। level नामक वेरिएबल घोषित करने के लिए, हमें नीचे दी गई कमांड निष्पादित करने की आवश्यकता है।

$ declare LEVEL

नोट: हमें "typecast" का उपयोग करने की आवश्यकता है, जो कोर्न शेल संगतता के लिए एक अंतर्निहित स्टेटमेंट है। 'declare' अधिक उन्नत है और इसमें सभी विशेषताएं हैं, इसलिए बैश का उपयोग करते समय इसकी सिफारिश की जाती है।

नियम
  1. एक वेरिएबल नाम स्क्रिप्ट में वेरिएबल के उपयोग को उचित ठहराना चाहिए।
  2. पूरे प्रोग्राम में एक ही वेरिएबल नाम का उपयोग करना दृढ़ता से सलाह दी जाती है।
  3. वेरिएबल नाम अपरकेस और लोअरकेस दोनों हो सकते हैं, लेकिन परंपरा के अनुसार शेल कमांड लोअरकेस में होते हैं, इसलिए हमें वेरिएबल नाम अपरकेस में उपयोग करना चाहिए ताकि किसी भी भ्रम से बचा जा सके। उदाहरण: TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT, आदि।

कार्यान्वयन

एक वेरिएबल को बराबर चिह्न (=) का उपयोग करके मान निर्दिष्ट किया जा सकता है। एक वेरिएबल को खाली स्ट्रिंग निर्दिष्ट करने के लिए हमें बराबर चिह्न के बाद कोई मान नहीं देना चाहिए।

$ LEVEL =

'LEVEL' वेरिएबल में संग्रहीत मान की जांच इस प्रकार करें।

$ printf "%i" $LEVEL

printf, वह कमांड जिससे अधिकांश 'C' प्रोग्रामर परिचित हैं, डेटा प्रिंट करता है। %i – पूर्णांक दर्शाता है। हम इसे आवश्यकतानुसार %c के साथ कैरेक्टर या %s के साथ स्ट्रिंग के लिए बदल सकते हैं।

$LEVEL: '$' पर ध्यान दें जो वेरिएबल 'LEVEL' के लिए मान प्रतिस्थापक के रूप में काम करता है।

नमूना आउटपुट
$ printf "%i" $LEVEL 0

वेरिएबल को मान निर्दिष्ट करें।

$ LEVEL=0

वेरिएबल में संग्रहीत डेटा की जांच करें।

$ printf "%i" $LEVEL 0

नोट: यह ध्यान रखना दिलचस्प है कि दोनों ही मामलों में, जब हमने वेरिएबल को मान निर्दिष्ट नहीं किया और जब हमने वेरिएबल 'LEVEL' को मान '0' निर्दिष्ट किया, तो आउटपुट 0 है। हालांकि दोनों मामलों में आउटपुट समान है, लेकिन शेल स्क्रिप्ट दोनों वेरिएबल घोषणाओं को अलग-अलग तरीके से संभालती है।

वेरिएबल को नया मान निर्दिष्ट करें।

$ LEVEL=121

वेरिएबल में संग्रहीत डेटा की जांच करें।

$ printf "%i" $LEVEL 121

वेरिएबल अनसेट करना

Declare एक बैश कमांड है और यह केवल निष्पादित होने पर वेरिएबल बनाता है। इस प्रकार बनाया गया वेरिएबल स्क्रिप्ट के रुकने या वेरिएबल के नष्ट होने तक मेमोरी में रहता है।

$ unset LEVEL

बैश में पूर्वनिर्धारित वेरिएबल्स

बैश में 50 से अधिक पूर्वनिर्धारित वेरिएबल्स हैं। इनमें से कुछ वेरिएबल्स का बैश के लिए विशेष अर्थ है, उदाहरण के लिए, वेरिएबल RANDOM एक यादृच्छिक संख्या आउटपुट करता है। यदि इसे अनसेट करके फिर से परिभाषित किया जाता है, तो मूल वेरिएबल मान हमेशा के लिए खो जाता है। इसलिए सिस्टम-परिभाषित किसी भी वेरिएबल का उपयोग न करने की सलाह दी जाती है।

यहां कुछ उपयोगी बैश वेरिएबल्स की सूची दी गई है।

  1. BASH—बैश का पूरा पथनाम।
  2. BASH_ENV—शेल स्क्रिप्ट में, स्क्रिप्ट शुरू होने से पहले निष्पादित प्रोफ़ाइल फ़ाइल का नाम।
  3. BASH_VERSION—बैश का संस्करण (उदाहरण के लिए, 2.04.0(1)-release)।
  4. COLUMNS—आपके डिस्प्ले पर प्रति पंक्ति वर्णों की संख्या (उदाहरण के लिए, 80)।
  5. HOSTNAME—कंप्यूटर का नाम। लिनक्स के कुछ संस्करणों में, यह मशीन नाम हो सकता है। अन्य में, यह एक पूर्णतः योग्य डोमेन नाम हो सकता है।
  6. HOSTTYPE—कंप्यूटर का प्रकार।
  7. HOME—आपकी होम डायरेक्टरी का नाम।
  8. OSTYPE—ऑपरेटिंग सिस्टम का नाम।
  9. PATH—कमांड को निष्पादित करने के लिए खोज पथों की कोलन-अलग सूची।
  10. PPID—शेल की मूल प्रक्रिया की प्रक्रिया आईडी।
  11. PROMPT_COMMAND—PS1 प्राथमिक प्रॉम्प्ट स्ट्रिंग की सेटिंग से पहले निष्पादित करने की कमांड।
  12. PWD—वर्तमान कार्य निर्देशिका (cd कमांड द्वारा सेट)।
  13. RANDOM—हर बार संदर्भित होने पर 0 और 32767 के बीच एक यादृच्छिक संख्या देता है।
  14. SHELL—उपयोग करने के लिए पसंदीदा शेल; उन प्रोग्रामों के लिए जो आपके लिए शेल शुरू करते हैं।
  15. TERM—टर्मिनल अनुकरण प्रकार (उदाहरण के लिए, कंसोल)।

वर्ड स्प्लिटिंग का नियम।

$ LEVEL=0 $ printf "%i" $LEVEL 0 AND $ LEVEL=”0” $ printf "%i" $LEVEL 0

दोनों मामलों में आउटपुट समान रहता है। तो उद्धरण चिह्नों का उपयोग करते समय परिणाम में क्या अंतर है?

आइए अलग वेरिएबल डेटा के साथ समान जांचते हैं।

$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5 bash: 1: command not found bash: 2: command not found bash: 3: command not found bash: 4: command not found bash: 5: command not found
$ printf "%i" $LEVEL 0

उल्लेख करने की आवश्यकता नहीं, आउटपुट सही नहीं है। बैश '0' के बाद के स्पेस को समाप्ति के रूप में ले रहा है और इसलिए वेरिएबल का मान '0' के रूप में सेट है। अब हम वेरिएबल्स के लिए उद्धरण चिह्नों का उपयोग करने का प्रयास करते हैं।

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5” $ printf "%s" $LEVEL 0;1;2;3;4;5

फिर भी परिणाम सही नहीं है। बैश ने वेरिएबल मान लिए और उनके बीच के सभी स्पेस हटा दिए। इसलिए printf ने 0,1,2,3,4,5 को अलग-अलग मानों के रूप में व्याख्या नहीं किया। तो समाधान क्या है?

printf "%s" "$LEVEL" 0 ; 1 ; 2 ; 3 ; 4 ; 5

हां! वेरिएबल प्रतिस्थापन को उद्धरण चिह्नों के अंतर्गत रखना समाधान है। उद्धरण शेल में वर्णों को समूहित करते हैं और विशेष वर्णों को सार्थक तरीके से व्याख्या करते हैं।

उद्धरणों को बैक-टू-बैक उपयोग किया जा सकता है और वेरिएबल प्रतिस्थापन को उद्धरण चिह्नों के साथ संलग्न करना एक अच्छा विचार है। इसके अलावा, इसका उपयोग समग्र पाठ को उद्धरणों से अलग करने के लिए किया जा सकता है। यहां एक उदाहरण है।

$ LEVEL=5 $ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." $ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

उद्धृत पाठ के खंडों को स्पेस से अलग करने से वही समस्या होगी जैसा ऊपर चर्चा की गई है। बैश व्हाइट स्पेस को समाप्ति के रूप में मानेगा। वेरिएबल प्रतिस्थापन का एक और तरीका है।

$ LEVEL=5 $ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." $ printf “%s” "$FLAG_MESSAGE" “I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

सिंगल कोट्स बैश को विशेष वर्ण प्रिंट करने से प्रतिबंधित करते हैं।

$ printf “%s” '$FLAG_MESSAGE' “$FLAG_MESSAGE”

बैकस्लैश (/)

बैकस्लैश एक वर्ण के लिए सिंगल कोट की तरह काम करता है। क्या आपने सोचा है कि आप (") कैसे प्रिंट करेंगे?

$ printf "%c" "\""

जब %q को printf के साथ समूहीकृत किया जाता है, तो यह हर शब्द के बाद बैकस्लैश प्रदान करता है ताकि शब्द स्पेसिंग सुनिश्चित हो सके।

$ LEVEL=5 $ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." $ printf “%q” "$FLAG_MESSAGE" “I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

अभी के लिए बस इतना ही। हम हमेशा अपने पाठकों को ऐसे लेख प्रदान करने का प्रयास करते हैं जो उनके लिए समय-समय पर उपयोगी हों। उपरोक्त कवर किया गया लेख विशाल है इसलिए बाकी विषय उदाहरणों के साथ अगले लेख में प्रस्तुत किए जाएंगे जिसमें 'वेरिएबल के गुण', 'वेरिएबल एक्सपोर्टिंग' आदि शामिल होंगे।

तब तक ट्यून रहें और Tecmint.com से जुड़े रहें। नीचे टिप्पणी अनुभाग में हमें अपनी बहुमूल्य प्रतिक्रिया देना न भूलें।


  1. लिनक्स बिगिनर्स और सिस्टम एडमिनिस्ट्रेटर्स के लिए 4 आवश्यक मुफ्त शेल स्क्रिप्टिंग ईबुक लिनक्स बिगिनर्स और सिस्टम एडमिनिस्ट्रेटर्स के लिए 4 आवश्यक मुफ्त शेल स्क्रिप्टिंग ईबुक

    सिस्टम एडमिनिस्ट्रेशन सूचना प्रौद्योगिकी की एक शाखा है जो मल्टी-यूज़र कंप्यूटर सिस्टम और सर्वर के विश्वसनीय संचालन से संबंधित है। वह व्यक्ति जो मल्टी-यूज़र कंप्यूटर सिस्टम और सर्वर के विश्वसनीय संचालन के लिए जिम्मेदार है, सिस्टम एडमिनिस्ट्रेटर कहलाता है। एक सिस्टम एडमिनिस्ट्रेटर जिसका विशेषज्ञता क्

  1. लिनक्स में नेस्टेड वेरिएबल सब्स्टीट्यूशन और बिल्ट-इन BASH वेरिएबल्स में महारत - अंतिम गाइड लिनक्स में नेस्टेड वेरिएबल सब्स्टीट्यूशन और बिल्ट-इन BASH वेरिएबल्स में महारत - अंतिम गाइड

    BASH शेल पर पिछले दो लेख, जहां हमने वेरिएबल्स पर विस्तार से चर्चा की थी, हमारे पाठकों द्वारा अत्यधिक सराहे गए। Tecmint-Team के रूप में हम आपको नवीनतम, अप-टू-डेट और प्रासंगिक विषयों को विस्तार से प्रदान करने के लिए बहुत उत्सुक हैं। इसके अलावा हम हमेशा संबंधित विषयों के प्रमुख दृष्टिकोणों को छूने का प

  1. शेल स्क्रिप्टिंग में लिनक्स वेरिएबल्स में महारत - भाग 10: विशेषज्ञ अंतर्दृष्टि शेल स्क्रिप्टिंग में लिनक्स वेरिएबल्स में महारत - भाग 10: विशेषज्ञ अंतर्दृष्टि

    लिनक्स शेल स्क्रिप्टिंग भाषा हमेशा एक गर्म विषय रही है और भविष्य में भी रहेगी। शेल स्क्रिप्टिंग भाषा जादुई है और किसी अन्य भाषा की तरह इसमें प्रोग्राम करना बहुत आसान है। हालांकि, इसके लिए इस गहन ज्ञान की आवश्यकता होती है कि हम क्या कर रहे हैं और परिणाम क्या अपेक्षित है। हमारे पाठकों के लिए लिखे गए