लिनक्स शेल स्क्रिप्टिंग भाषा हमेशा एक गर्म विषय रही है और भविष्य में भी रहेगी। शेल स्क्रिप्टिंग भाषा जादुई है और किसी अन्य भाषा की तरह इसमें प्रोग्राम करना बहुत आसान है। हालांकि, इसके लिए इस गहन ज्ञान की आवश्यकता होती है कि हम क्या कर रहे हैं और परिणाम क्या अपेक्षित है।
हमारे पाठकों के लिए लिखे गए सभी शेल स्क्रिप्टिंग लेख अत्यधिक सराहे गए हैं, जिसमें पिछला लेख "लिनक्स वेरिएबल्स की अंतर्दृष्टि" भी शामिल है। हम पिछले लेख को एक नए स्तर तक बढ़ा रहे हैं।
वेरिएबल विशेषताएँ
लिनक्स वातावरण में प्रत्येक वेरिएबल के कुछ विकल्प होते हैं, जिन्हें 'विशेषताएँ' कहा जाता है। इन विकल्पों या विशेषताओं को स्थिति के अनुसार आवश्यकता पड़ने पर "declare" कमांड का उपयोग करके चालू और बंद किया जा सकता है।
वेरिएबल विशेषता का एक उदाहरण स्विच '-i' का उपयोग करना है जो संबंधित वेरिएबल के लिए पूर्णांक विशेषता को चालू कर देगा। यहां तक कि अगर स्विच '-i' को एक गैर-संख्यात्मक मान पास किया जाता है, तो यह एक त्रुटि संदेश नहीं फेंकेगा और पूर्णांक व्याख्या के रूप में आउटपुट '0' देगा। नीचे दिए गए उदाहरण से यह अधिक स्पष्ट हो जाता है।
एक पूर्णांक वेरिएबल घोषित करें, bill = 121
admin@wsxdn.com:~$ declare -i bill=121
वेरिएबल bill का मान प्रिंट करें।
admin@wsxdn.com:~$ printf "%d\n" "$bill" 121
वेरिएबल का मान एक स्ट्रिंग होने दें। वेरिएबल bill पहले से ही घोषित है, इसे दूसरी बार घोषित करने की आवश्यकता नहीं है। बस वेरिएबल का मान बदलें।
admin@wsxdn.com:~$ bill=tecmint
अब, फिर से वेरिएबल bill का मान प्रिंट करें।
admin@wsxdn.com:~$ printf "%d\n" "$bill" 0
त्रुटि संदेश के स्थान पर '0' पर ध्यान दें।
अब, सवाल यह है कि पहले से घोषित वेरिएबल्स की विशेषताओं को कैसे जानें?
admin@wsxdn.com:~$ declare -p bill declare -i bill="121"
यहां, एक -p (प्रिंट के लिए) स्विच बचाव में आता है।
फिर, वेरिएबल की विशेषताओं को बंद करने के लिए मुझे क्या करना चाहिए?
वेरिएबल की विशेषताओं को बंद करने के लिए हमें बस स्विच से पहले + (प्लस) चिह्न लगाना होगा। नीचे दिए गए उदाहरण से यह अधिक स्पष्ट है।
उपरोक्त वेरिएबल के लिए पूर्णांक विशेषता को बंद करें।
admin@wsxdn.com:~$ declare +i bill
वेरिएबल के मान की जांच करें।
admin@wsxdn.com:~$ printf "%d\n" "$bill" bash: printf: bill: invalid number 0
अब स्ट्रिंग स्विच का उपयोग करके वेरिएबल का मान प्रिंट करें।
admin@wsxdn.com:~$ printf "%s\n" "$bill" tecmint
उपरोक्त उदाहरण में, bash गैर-संख्यात्मक मान को त्रुटि के रूप में नहीं आंक सका, हालांकि printf व्याख्या कर रहा है कि क्या एक संख्या हो सकती है और क्या नहीं।
रीड-ओनली वेरिएबल्स
आपने रीड ओनली मेमोरी (ROM) के बारे में सुना होगा, लेकिन रीड-ओनली वेरिएबल क्या है? क्या इसका ROM से कोई समानता है?
खैर, रीड-ओनली वेरिएबल्स रीड-ओनली मेमोरी की तरह होते हैं जिनका मान एक बार असाइन होने के बाद बदला नहीं जा सकता। इसलिए इसे रीड-ओनली कहा जाता है। आप उस वेरिएबल के लिए एक नया मान लिख, संपादित या संशोधित नहीं कर सकते। यहां उदाहरण का उपयोग करके एक चित्रण है।
एक रीड ओनली (-r) वेरिएबल name घोषित करें, जिसका मान "Tecmint.com" है।
admin@wsxdn.com:~$ declare -r name="Tecmint.com"
उपरोक्त घोषित वेरिएबल का मान प्रिंट करें।
admin@wsxdn.com:~$ printf "%s\n" "$name" Tecmint.com
वेरिएबल के मान को बदलने का प्रयास करें।
admin@wsxdn.com:~$ declare -r name="Avishek" bash: declare: name: readonly variable
जैसा कि ऊपर चर्चा की गई है, रीड-ओनली वेरिएबल की विशेषताओं को '+' चिह्न का उपयोग करके बदला जा सकता है।
लिनक्स में वेरिएबल्स एक्सपोर्ट करना
शेल स्क्रिप्ट में घोषित सभी शेल वेरिएबल्स तब तक उपलब्ध होते हैं जब तक स्क्रिप्ट चल रही होती है। स्क्रिप्ट के बाहर स्क्रिप्ट से वेरिएबल मौजूद नहीं होता। वेरिएबल्स को स्क्रिप्ट के बाहर उपलब्ध कराने की प्रक्रिया को वेरिएबल्स एक्सपोर्ट करना कहा जाता है।
स्विच declare -x (एक्सपोर्ट) का उपयोग करके एक वेरिएबल को शेल के बाहर एक्सपोर्ट किया जा सकता है, जो शेल को स्वीकार करता है कि आप क्या एक्सपोर्ट करना चाहते हैं। एक डिक्लेयर एक्सपोर्ट स्विच का उपयोग इस प्रकार किया जा सकता है।
admin@wsxdn.com:~$ declare -x variable=”Constant_Value”
स्क्रिप्ट चलने के दौरान वेरिएबल में किए गए सभी परिवर्तन, जब वेरिएबल को स्क्रिप्ट के बाहर एक्सपोर्ट किया जाता है तो खो जाते हैं। शेल स्क्रिप्टिंग में वेरिएबल एक्सपोर्ट करना बहुत महत्वपूर्ण है।
हम एक ऐसा वेरिएबल चाहते हैं जो रीड-ओनली हो और स्क्रिप्ट के बाहर उपलब्ध हो, हमें स्विच -r और स्विच -x को एक साथ उपयोग करने की आवश्यकता है।
admin@wsxdn.com:~$ declare -rx variable=”Constant_Value”
पर्यावरण वेरिएबल्स
वेरिएबल्स जो प्रोग्राम और उन्हें निष्पादित करने वाले प्रोग्राम के बीच साझा किए जाते हैं। पर्यावरण वेरिएबल्स को एक्सपोर्ट किया जा सकता है लेकिन विशेषताओं को असाइन नहीं किया जा सकता।
उपरोक्त सिद्धांत को व्यावहारिक रूप से समझना। यहां हमारे पास दो स्क्रिप्ट्स 0.sh और 1.sh हैं।
# 0.sh #!/bin/bash declare -rx name=Tecmint bash 0.sh exit 0
और दूसरी स्क्रिप्ट है।
# 1.sh #!/bin/bash printf "%s\n" "$name" name=Tecmint.com printf "%s\n" "$name" exit 0
यहां क्या हो रहा है, एक वेरिएबल (name) को रीड ओनली और एक्सपोर्ट के रूप में घोषित किया गया है और उसके तुरंत बाद दूसरी स्क्रिप्ट को कॉल किया जाता है।
दूसरी स्क्रिप्ट ने केवल पहले स्क्रिप्ट से एक्सपोर्ट किए गए वेरिएबल को पहले printf स्टेटमेंट में प्रिंट किया। दूसरे printf स्टेटमेंट में यह वेरिएबल 'name' को असाइन किए गए नए मान को दिखाता है।
चिंता करने की कोई बात नहीं, कि वेरिएबल रीड-ओनली था, इसे कैसे पुनः असाइन किया जा सकता है। क्या आपको याद नहीं है कि "स्क्रिप्ट चलने के दौरान वेरिएबल में किए गए सभी परिवर्तन, जब वेरिएबल को स्क्रिप्ट के बाहर एक्सपोर्ट किया जाता है तो खो जाते हैं।"
संदर्भ
declare कमांड नीचे दिए गए सभी स्विच के साथ-साथ उनके संयोजन की अनुमति देता है।
- -a : एक सरणी घोषित करता है।
- -f : फंक्शन और परिभाषा प्रदर्शित करता है।
- -F : फंक्शन नाम प्रदर्शित करता है।
- -r : वेरिएबल को रीड-ओनली के रूप में घोषित करता है।
- -x : वेरिएबल को एक्सपोर्टेबल के रूप में घोषित करता है।
- -I : वेरिएबल को पूर्णांक के रूप में घोषित करता है।
अभी के लिए बस इतना ही। अगले लेख में हम वेरिएबल्स को 'eval' कमांड का उपयोग करके प्रतिस्थापित करने के तरीकों और इस विषय को बंद करने से पहले BASH में पहले से परिभाषित वेरिएबल्स पर चर्चा करेंगे। आशा है कि आप लोग स्क्रिप्टिंग की गहराई की यात्रा का आनंद ले रहे हैं। तब तक Tecmint.com से जुड़े रहें।