चर और अचर को मान निर्दिष्ट करना
यहीं से विस्तार के बारे में हमारा ज्ञान वास्तव में काम आना शुरू होता है। जैसा कि हमने देखा है, चरों को इस प्रकार मान दिए जाते हैं:
परिवर्तनशील=मूल्य
जहां परिवर्तनशील चर का नाम है और मूल्य एक स्ट्रिंग है। कुछ अन्य प्रोग्रामिंग भाषाओं के विपरीत, शेल किसी चर को दिए गए डेटा के प्रकार की परवाह नहीं करता; यह उन सभी को स्ट्रिंग के रूप में मानता है। आप शेल को असाइनमेंट को पूर्णांकों तक सीमित करने के लिए बाध्य कर सकते हैं। घोषित के साथ कमान -i विकल्प, लेकिन, चर को केवल पढ़ने के लिए सेट करने की तरह, यह शायद ही कभी किया जाता है।
ध्यान दें कि किसी असाइनमेंट में, वेरिएबल नाम, बराबर के चिह्न और मान के बीच कोई रिक्त स्थान नहीं होना चाहिए। तो मान में क्या-क्या शामिल हो सकता है? कोई भी चीज़ जिसे हम एक स्ट्रिंग में विस्तारित कर सकें:
ए=जेड
b="एक स्ट्रिंग"
c="एक स्ट्रिंग और $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta स्ट्रिंग\n"
# स्ट्रिंग "z" को वेरिएबल a पर असाइन करें.
# एम्बेडेड रिक्त स्थान उद्धरण चिह्नों के भीतर होने चाहिए.
# अन्य विस्तार जैसे चर भी हो सकते हैं
# असाइनमेंट में विस्तार किया गया.
# एक आदेश के परिणाम.
# अंकगणितीय विस्तार.
# टैब और नई पंक्तियों जैसे एस्केप अनुक्रम.
ए=जेड
b="एक स्ट्रिंग"
c="एक स्ट्रिंग और $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta स्ट्रिंग\n"
एक ही पंक्ति पर कई चर असाइनमेंट किए जा सकते हैं:
a=5 b="एक स्ट्रिंग"
a=5 b="एक स्ट्रिंग"
विस्तार के दौरान, चर नामों को वैकल्पिक घुंघराले ब्रेसिज़ “{}” से घेरा जा सकता है। यह उन मामलों में उपयोगी है जहाँ चर नाम अपने आस-पास के कोनों के कारण अस्पष्ट हो जाता है।
पाठ। यहाँ, हम किसी फ़ाइल का नाम बदलने का प्रयास करते हैं मेरी फाइल सेवा मेरे मेरीफ़ाइल1, एक चर का उपयोग करके:
[मुझे@लिनक्सबॉक्स ~]$ फ़ाइलनाम="मेरीफ़ाइल" [मुझे@लिनक्सबॉक्स ~]$ $फ़ाइलनाम स्पर्श करें [मुझे@लिनक्सबॉक्स ~]$ mv $फ़ाइलनाम $फ़ाइलनाम1
mv: `myfile' के बाद गंतव्य फ़ाइल ऑपरेंड गायब है। अधिक जानकारी के लिए `mv --help' का प्रयास करें।
[मुझे@लिनक्सबॉक्स ~]$ फ़ाइलनाम="मेरीफ़ाइल" [मुझे@लिनक्सबॉक्स ~]$ $फ़ाइलनाम स्पर्श करें [मुझे@लिनक्सबॉक्स ~]$ mv $फ़ाइलनाम $फ़ाइलनाम1
mv: `myfile' के बाद गंतव्य फ़ाइल ऑपरेंड गायब है। अधिक जानकारी के लिए `mv --help' का प्रयास करें।
यह प्रयास विफल हो जाता है क्योंकि शेल दूसरे तर्क की व्याख्या करता है mv कमांड को एक नए (और खाली) वेरिएबल के रूप में बदलें। इस समस्या का समाधान इस प्रकार किया जा सकता है:
[मुझे@लिनक्सबॉक्स ~]$ mv $फ़ाइलनाम ${फ़ाइलनाम}1
[मुझे@लिनक्सबॉक्स ~]$ mv $फ़ाइलनाम ${फ़ाइलनाम}1
आस-पास के ब्रेसिज़ जोड़ने से, शेल अब अनुगामी ब्रेसिज़ की व्याख्या नहीं करता है 1 चर नाम के भाग के रूप में.
हम इस अवसर पर अपनी रिपोर्ट में कुछ डेटा जोड़ेंगे, जैसे रिपोर्ट बनाने की तिथि और समय तथा निर्माता का उपयोगकर्ता नाम:
#! / Bin / bash
# सिस्टम सूचना पृष्ठ आउटपुट करने के लिए प्रोग्राम TITLE="सिस्टम सूचना रिपोर्ट $HOSTNAME के लिए"
वर्तमान_समय=$(दिनांक +"%x %r %Z")
TIMESTAMP='$USER द्वारा $CURRENT_TIME जेनरेट किया गया'
प्रतिध्वनि"
$शीर्षक
$शीर्षक
$टाइमस्टैम्प
"
#! / Bin / bash
# सिस्टम सूचना पृष्ठ आउटपुट करने के लिए प्रोग्राम TITLE="सिस्टम सूचना रिपोर्ट $HOSTNAME के लिए"
वर्तमान_समय=$(दिनांक +"%x %r %Z")
TIMESTAMP='$USER द्वारा $CURRENT_TIME जेनरेट किया गया'
प्रतिध्वनि"
$शीर्षक
$शीर्षक
$टाइमस्टैम्प
"