यह लेख हमारी चल रही बैश ट्यूटोरियल श्रृंखला का हिस्सा है। किसी भी अन्य प्रोग्रामिंग भाषाओं की तरह, बैश भी चर प्रदान करता है।
बैश चर जानकारी के लिए अस्थायी भंडारण प्रदान करते हैं जिसकी कार्यक्रम के जीवनकाल के दौरान आवश्यकता होगी।
सिंटैक्स:
VARNAME=VALUE
नोट: वेरिएबल असाइनमेंट में "=" साइन के आसपास कोई स्थान नहीं होना चाहिए। जब आप VAR=VALUE का उपयोग करते हैं, तो शेल "=" को एक प्रतीक के रूप में देखता है और कमांड को एक चर असाइनमेंट के रूप में मानता है। जब आप VAR =VALUE का उपयोग करते हैं, तो शेल मानता है कि VAR एक कमांड का नाम होना चाहिए और इसे निष्पादित करने का प्रयास करता है।
शेल चर के प्रकार की परवाह नहीं करता है। चर तार, पूर्णांक, या वास्तविक संख्याओं को संग्रहीत कर सकते हैं।
उदाहरण.1 साधारण बैश वैरिएबल असाइनमेंट उपयोग
निम्न स्क्रिप्ट LIST नामक एक चर बनाती है और "/ var/opt/bin" मान निर्दिष्ट करती है। चरों तक पहुँचने के लिए, बस चर नाम के आगे $ लगाएं, जो आपको उस चर में संग्रहीत मान देगा।
$ cat sample.sh #!/bin/bash LIST="/var/opt/bin/" ls -l $LIST
उपरोक्त स्क्रिप्ट निष्पादित करें, जो नीचे दिखाए गए अनुसार लंबे प्रारूप में /var/opt/bin सूचीबद्ध करेगी।
$ ./sample.sh total 8 drwxrwsr-x 2 bin bin 4096 Jan 29 06:43 softwares drwxr-sr-x 5 root bin 4096 Sep 2 2009 llist
बैश वैरिएबल स्कोप - स्थानीय और वैश्विक
बैश में, चर घोषित करने की आवश्यकता नहीं है। लेकिन, जब आप वेरिएबल को एक्सेस करते हैं जिसका अब तक उपयोग नहीं किया गया है, तो आपको कोई चेतावनी या त्रुटि संदेश नहीं मिलेगा। इसके बजाय, यह एक रिक्त मान प्रदर्शित करेगा।
<केंद्र> केंद्र>उदाहरण 2. बैश वैरिएबल में रिक्त मान
$ cat var1.sh #!/bin/sh echo "Variable value is: $VAR1" VAR1="GEEKSTUFF" echo "Variable value is: $VAR1" $ ./var1.sh Variable value is: Variable value is: GEEKSTUFF
जैसा कि ऊपर दिखाया गया है, शुरू में वैरिएबल का एक खाली मान होगा, असाइन करने के बाद, आप अपने मान प्राप्त कर सकते हैं। एक्सपोर्ट कमांड का इस्तेमाल इंटरेक्टिव शेल से वेरिएबल को एक्सपोर्ट करने के लिए किया जाता है। निर्यात चर के दायरे पर प्रभाव दिखाता है।
उदाहरण 3. निर्यात के बिना बैश वैरिएबल
एक इंटरैक्टिव शेल में एक मान के साथ एक वैरिएबल असाइन करें, और इसे अपनी शेल स्क्रिप्ट में एक्सेस करने का प्रयास करें।
$ VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
अब, उपरोक्त स्क्रिप्ट को नीचे दिखाए अनुसार निष्पादित करें।
$ ./var2.sh VAR2= VAR2=UNIX
फिर भी आपको वेरिएबल VAR2 के लिए रिक्त मान मिलेगा। शेल चर VAR2 को LINUX के साथ केवल वर्तमान शेल में संग्रहीत करता है। Var2.sh के निष्पादन के दौरान, यह शेल को जन्म देता है और यह स्क्रिप्ट को निष्पादित करता है। तो वेरिएबल VAR2 का स्पॉन्ड शेल में मान नहीं होगा। आपको वेरिएबल को किसी अन्य प्रोग्राम द्वारा इनहेरिट करने के लिए निर्यात करने की आवश्यकता है - शेल स्क्रिप्ट सहित, जैसा कि नीचे दिखाया गया है।
उदाहरण 4. बैश वैरिएबल निर्यात करना
$ export VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
अब उपरोक्त स्क्रिप्ट को निष्पादित करें।
$ ./var2.sh VAR2=LINUX VAR2=UNIX $ $echo $VAR2 LINUX
अब, आप देख सकते हैं कि शेल स्क्रिप्ट var2.sh के निष्पादन के बाद, VAR2 का मान LINUX है। क्योंकि जब तक आप मौजूदा शेल में स्क्रिप्ट को निष्पादित नहीं करते हैं, तब तक वेरिएबल्स को आपके इंटरेक्टिव शेल में वापस नहीं भेजा जाएगा।
बैश वैरिएबल घोषित करना
बैश में डिक्लेयर स्टेटमेंट का उपयोग करके, हम वेरिएबल्स को असाइन किए गए मान को सीमित कर सकते हैं। यह चर के गुणों को प्रतिबंधित करता है। डिक्लेअर स्टेटमेंट में विकल्प का उपयोग वैरिएबल के प्रकार को निर्धारित करने के लिए किया जाता है।
सिंटैक्स:
declare option variablename
- डिक्लेयर एक कीवर्ड है
- विकल्प हो सकता है:
- -r रीड ओनली वेरिएबल
- -i पूर्णांक चर
- -एक सरणी चर
- -फ मनोरंजन के लिए
- -x पर्यावरण के माध्यम से बाद के आदेशों को घोषित और निर्यात करता है।
उदाहरण 5. घोषणा का उपयोग करके बैश चर की घोषणा
$ cat declar.sh #!/bin/bash declare -i intvar intvar=123 # Assigning integer value. echo $intvar intvar=12.3 #Trying to store string type value to an integer variable echo $intvar declare -r rovar=281 rovar=212 # Trying to change the readonly variable.
नीचे दिए गए निष्पादन से, जब आप किसी वैरिएबल को अमान्य डेटा असाइन करते हैं, तो आप त्रुटि संदेश देख सकते हैं।
$ ./declar.sh 123 t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3") 123 t.sh: line 11: rovar: readonly variable
ग्लोबल बैश वैरिएबल
वैश्विक चर को पर्यावरण चर भी कहा जाता है, जो सभी गोले के लिए उपलब्ध होगा। Printenv कमांड का उपयोग सभी पर्यावरण चरों को प्रदर्शित करने के लिए किया जाता है।
$ printenv SHELL=/bin/bash HISTSIZE=1000 SSH_TTY=/dev/pts/1 HOME=/root LOGNAME=root CVS_RSH=ssh
स्थानीय बैश चर
स्थानीय चर केवल कोड के ब्लॉक के भीतर दिखाई दे रहे हैं। स्थानीय एक कीवर्ड है जिसका उपयोग स्थानीय चर घोषित करने के लिए किया जाता है। किसी फ़ंक्शन में, एक स्थानीय चर का अर्थ केवल उस फ़ंक्शन ब्लॉक के भीतर होता है।
उदाहरण 6. वैश्विक और स्थानीय बैश चर
$ cat localvar.sh #!/bin/bash pprint() { local lvar="Local content" echo -e "Local variable value with in the function" echo $lvar gvar="Global content changed" echo -e "Global variable value with in the function" echo $gvar } gvar="Global content" echo -e "Global variable value before calling function" echo $gvar echo -e "Local variable value before calling function" echo $lvar pprint echo -e "Global variable value after calling function" echo $gvar echo -e "Local variable value after calling function" echo $lvar
उपरोक्त स्क्रिप्ट निष्पादित करें,
$ sh t.sh Global variable value before calling function Global content Local variable value before calling function Local variable value with in the function Local content Global variable value with in the function Global content changed Global variable value after calling function Global content changed Local variable value after calling function
उपरोक्त आउटपुट में, फ़ंक्शन को कॉल करने से पहले और बाद में स्थानीय चर का केवल खाली मान होगा। इसका दायरा केवल फंक्शन में है। यह फ़ंक्शन से गायब हो गया, जबकि फ़ंक्शन निष्पादन के बाद भी वैश्विक चर का अद्यतन मूल्य है।