चर और स्थिरांक
हालाँकि, हमारी स्क्रिप्ट के साथ एक समस्या है। ध्यान दें कि स्ट्रिंग "सिस्टम सूचना रिपोर्ट" कैसे दोहराई जाती है? हमारी छोटी स्क्रिप्ट के साथ यह कोई समस्या नहीं है, लेकिन आइए कल्पना करें कि हमारी स्क्रिप्ट वास्तव में लंबी थी और हमारे पास इस स्ट्रिंग के कई उदाहरण थे। यदि हम शीर्षक को किसी और चीज़ में बदलना चाहते हैं, तो हमें इसे कई स्थानों पर बदलना होगा, जिसमें बहुत काम हो सकता है। क्या होगा अगर हम स्क्रिप्ट को इस तरह व्यवस्थित कर सकें कि स्ट्रिंग केवल एक बार दिखाई दे, कई बार नहीं? इससे भविष्य में स्क्रिप्ट का रखरखाव बहुत आसान हो जाएगा। यहां बताया गया है कि हम ऐसा कैसे कर सकते हैं:
#! / Bin / bash
# सिस्टम सूचना पृष्ठ को आउटपुट करने का प्रोग्राम
शीर्षक = "सिस्टम सूचना रिपोर्ट"
प्रतिध्वनि"
$शीर्षक
$शीर्षक
"
#! / Bin / bash
# सिस्टम सूचना पृष्ठ को आउटपुट करने का प्रोग्राम
शीर्षक = "सिस्टम सूचना रिपोर्ट"
प्रतिध्वनि"
$शीर्षक
$शीर्षक
"
बनाकर ए परिवर्तनशील नामित शीर्षक और इसे "सिस्टम सूचना रिपोर्ट" मान निर्दिष्ट करके, हम पैरामीटर विस्तार का लाभ उठा सकते हैं और स्ट्रिंग को कई स्थानों पर रख सकते हैं।
तो, हम एक वेरिएबल कैसे बनाते हैं? सरल, हम बस इसका उपयोग करते हैं। जब शेल किसी वेरिएबल का सामना करता है, तो यह स्वचालित रूप से इसे बनाता है। यह कई प्रोग्रामिंग भाषाओं से भिन्न है जिनमें चर स्पष्ट रूप से होने चाहिए घोषित या उपयोग से पहले परिभाषित किया गया। शेल इस मामले में बहुत ढीला है, जिससे कुछ समस्याएं हो सकती हैं। उदाहरण के लिए, कमांड लाइन पर खेले गए इस परिदृश्य पर विचार करें:
[मुझे@लिनक्सबॉक्स ~]$ फू = "हाँ" [मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि $foo हाँ
[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि $मूर्ख
[मुझे@लिनक्सबॉक्स ~]$
[मुझे@लिनक्सबॉक्स ~]$ फू = "हाँ" [मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि $foo हाँ
[मुझे@लिनक्सबॉक्स ~]$ प्रतिध्वनि $मूर्ख
[मुझे@लिनक्सबॉक्स ~]$
हम पहले वेरिएबल को "हाँ" मान निर्दिष्ट करते हैं foo, और फिर इसके मान को प्रदर्शित करें गूंज. इसके बाद हम "मूर्ख" के रूप में गलत वर्तनी वाले वेरिएबल नाम का मान प्रदर्शित करते हैं और एक रिक्त परिणाम प्राप्त करते हैं। ऐसा इसलिए है क्योंकि शेल ने खुशी-खुशी वेरिएबल बनाया मूर्ख जब इसका सामना हुआ, और इसे कुछ भी नहीं, या खाली का डिफ़ॉल्ट मान दिया गया। इससे हमें यह सीख मिलती है कि हमें अपनी वर्तनी पर पूरा ध्यान देना चाहिए! यह समझना भी महत्वपूर्ण है कि इस उदाहरण में वास्तव में क्या हुआ था। शेल कैसे विस्तार करता है, इस पर हमारी पिछली नज़र से, हम जानते हैं कि कमांड:
[me@linuxbox ~]$ प्रतिध्वनि $foo
[me@linuxbox ~]$ प्रतिध्वनि $foo
पैरामीटर विस्तार से गुजरता है और परिणाम होता है:
[me@linuxbox ~]$ प्रतिध्वनि हाँ
[me@linuxbox ~]$ प्रतिध्वनि हाँ
जबकि आदेश:
[me@linuxbox ~]$ प्रतिध्वनि $मूर्ख
[me@linuxbox ~]$ प्रतिध्वनि $मूर्ख
में फैलता है:
[me@linuxbox ~]$ प्रतिध्वनि
[me@linuxbox ~]$ प्रतिध्वनि
खाली चर शून्य में विस्तारित होता है! यह उन आदेशों के साथ खिलवाड़ कर सकता है जिनमें तर्क की आवश्यकता होती है। यहाँ एक उदाहरण है:
[मुझे@लिनक्सबॉक्स ~]$ foo=foo.txt [मुझे@लिनक्सबॉक्स ~]$ foo1=foo1.txt [मुझे@लिनक्सबॉक्स ~]$ सीपी $फू $मूर्ख
सीपी: `foo.txt' के बाद गंतव्य फ़ाइल ऑपरेंड गुम है
[मुझे@लिनक्सबॉक्स ~]$ foo=foo.txt [मुझे@लिनक्सबॉक्स ~]$ foo1=foo1.txt [मुझे@लिनक्सबॉक्स ~]$ सीपी $फू $मूर्ख
सीपी: `foo.txt' के बाद गंतव्य फ़ाइल ऑपरेंड गुम है
अधिक जानकारी के लिए `cp --help' आज़माएँ।
अधिक जानकारी के लिए `cp --help' आज़माएँ।
हम दो वेरिएबल्स को मान निर्दिष्ट करते हैं, foo और foo1. फिर हम प्रदर्शन करते हैं cp, लेकिन दूसरे तर्क का नाम गलत लिखा है। विस्तार के बाद, cp आदेश में केवल एक तर्क भेजा जाता है, हालाँकि इसके लिए दो की आवश्यकता होती है।
परिवर्तनीय नामों के बारे में कुछ नियम हैं:
1. परिवर्तनीय नामों में अल्फ़ान्यूमेरिक वर्ण (अक्षर और संख्याएं) और अंडरस्कोर वर्ण शामिल हो सकते हैं।
2. किसी वेरिएबल नाम का पहला अक्षर या तो एक अक्षर या अंडरस्कोर होना चाहिए।
3. रिक्त स्थान और विराम चिन्हों की अनुमति नहीं है।
"वैरिएबल" शब्द का तात्पर्य एक ऐसे मान से है जो बदलता है, और कई अनुप्रयोगों में, वेरिएबल का उपयोग इस तरह से किया जाता है। हालाँकि, हमारे एप्लिकेशन में चर, शीर्षक, के रूप में उपयोग किया जाता है स्थिर. एक स्थिरांक बिल्कुल एक चर की तरह होता है जिसमें उसका एक नाम होता है और एक मान होता है। अंतर यह है कि स्थिरांक का मान नहीं बदलता है। एक एप्लिकेशन में जो ज्यामितीय गणना करता है, हम परिभाषित कर सकते हैं PI एक स्थिरांक के रूप में, और इसका मान निर्दिष्ट करें 3.1415, हमारे पूरे कार्यक्रम में संख्या का शाब्दिक उपयोग करने के बजाय। शेल चर और स्थिरांक के बीच कोई अंतर नहीं करता है; वे अधिकतर प्रोग्रामर की सुविधा के लिए हैं। एक आम परंपरा यह है कि स्थिरांकों को निर्दिष्ट करने के लिए बड़े अक्षरों का उपयोग किया जाता है और वास्तविक चरों के लिए छोटे अक्षरों का उपयोग किया जाता है। हम इस सम्मेलन का अनुपालन करने के लिए अपनी स्क्रिप्ट को संशोधित करेंगे:
#! / Bin / bash
# सिस्टम सूचना पृष्ठ को आउटपुट करने का प्रोग्राम शीर्षक= "सिस्टम सूचना रिपोर्ट $HOSTNAME के लिए"प्रतिध्वनि"
$शीर्षक
$शीर्षक
"
#! / Bin / bash
# सिस्टम सूचना पृष्ठ को आउटपुट करने का प्रोग्राम शीर्षक= "सिस्टम सूचना रिपोर्ट $HOSTNAME के लिए"प्रतिध्वनि"
$शीर्षक
$शीर्षक
"
हमने शेल वेरिएबल का मान जोड़कर अपने शीर्षक को बेहतर बनाने का अवसर भी लिया
होस्टनाम. यह मशीन का नेटवर्क नाम है.
नोट: शेल वास्तव में के उपयोग के माध्यम से, स्थिरांक की अपरिवर्तनीयता को लागू करने का एक तरीका प्रदान करता है घोषित के साथ अंतर्निहित कमांड -r (केवल पढ़ने के लिए) विकल्प। क्या हमने सौंपा था शीर्षक इस तरफ:
घोषित करें -r शीर्षक='पेज शीर्षक'
शेल किसी भी आगामी असाइनमेंट को रोक देगा शीर्षक. इस सुविधा का उपयोग शायद ही कभी किया जाता है, लेकिन यह बहुत औपचारिक स्क्रिप्ट के लिए मौजूद है।