Bash शेल विस्तार
शेल द्वारा इनपुट का विश्लेषण करते समय किए जाने वाले संचालन में से एक शेल विस्तार है। Bash विभिन्न प्रकार के विस्तार प्रदान करता है। इस लेख में आइए एक महत्वपूर्ण विस्तार की समीक्षा करें - "ब्रेस विस्तार"।
यह लेख हमारी चल रही Bash ट्यूटोरियल सीरीज़ का हिस्सा है।
ब्रेस विस्तार
ब्रेस विस्तार का उपयोग मनमाने स्ट्रिंग्स जनरेट करने के लिए किया जाता है। ब्रेस विस्तार आपको एकल आर्ग्यूमेंट से कमांड लाइन आर्ग्यूमेंट्स के कई संशोधित संस्करण बनाने की अनुमति देता है। निर्दिष्ट स्ट्रिंग्स का उपयोग वैकल्पिक आसपास के प्रीएम्बल्स और पोस्टस्क्रिप्ट्स के साथ सभी संभावित संयोजन जनरेट करने के लिए किया जाता है। प्रीएम्बल को ब्रेसेस के भीतर निहित प्रत्येक स्ट्रिंग से उपसर्गित किया जाता है, और पोस्टस्क्रिप्ट को तब प्रत्येक परिणामी स्ट्रिंग में जोड़ा जाता है, बाएं से दाएं विस्तारित होता है।
$ echo last{mce,boot,xorg}.log lastmce.log lastboot.log lastxorg.log जहां last प्रीएम्बल है और .log पोस्टस्क्रिप्ट है
उपरोक्त echo स्टेटमेंट आपको तीन लॉग फ़ाइलों को अलग से निर्दिष्ट करने से बचाता है। यदि आप अंतिम बूट लॉग, mce लॉग और xorg लॉग की सामग्री देखना चाहते हैं तो आप ब्रेस विस्तार का उपयोग कर सकते हैं जैसा कि उपरोक्त echo स्टेटमेंट में दिखाया गया है।
1. ब्रेस विस्तार का उपयोग करके बैकअप का उदाहरण
$ cat bkup.sh set -x # कमांड्स का विस्तार करें da=`date +%F` cp $da.log{,.bak} $ ./bkup.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log 2010-05-28.log.bak
उपरोक्त बैकअप स्क्रिप्ट में, यह वर्तमान तिथि लॉग फ़ाइल को .bak एक्सटेंशन के साथ कॉपी करता है। ब्रेसेस में पहला तत्व खाली है, इसलिए पहला तत्व केवल प्रीएम्बल होगा।
2. ब्रेस विस्तार का उपयोग करके रिस्टोर का उदाहरण
$ cat restore.sh set -x # कमांड्स का विस्तार करें da=`date +%F` cp $da.log{.bak,} $ ./restore.sh ++ date +%F + da=2010-05-28 + cp 2010-05-28.log.bak 2010-05-28.log
रिस्टोर स्क्रिप्ट में, पैरामीटर में पहला तत्व .bak है जबकि दूसरा तत्व खाली है।
इसके अलावा, अतिरिक्त पठन के लिए bash शेल फ़ंक्शन्स पर हमारे पहले के लेख देखें।
3. प्रीएम्बल और पोस्टस्क्रिप्ट के बिना ब्रेस विस्तार का उदाहरण
यदि कोई प्रीएम्बल और पोस्टस्क्रिप्ट नहीं है, तो यह केवल ब्रेसेस में दिए गए तत्वों का विस्तार करता है।
$ cat expand.sh echo {oct,hex,dec,bin} $ ./expand.sh oct hex dec bin
वैकल्पिक प्रीएम्बल और पोस्टस्क्रिप्ट स्ट्रिंग्स के बिना, परिणाम केवल दी गई स्ट्रिंग्स की स्पेस-सेपरेटेड सूची है
रेंज के लिए ब्रेस विस्तार
ब्रेस विस्तार अनुक्रमों का भी विस्तार करता है। अनुक्रम पूर्णांक या वर्ण हो सकते हैं।
4. पूर्णांक और वर्ण अनुक्रमों का उदाहरण
$ cat sequence.sh cat /var/log/messages.{1..3} echo {a..f}{1..9}.txt $ ./sequence.sh May 9 01:18:29 x3 ntpd[2413]: time reset -0.132703 s May 9 01:22:38 x3 ntpd[2413]: synchronized to LOCAL(0), stratum 10 May 9 01:23:44 x3 ntpd[2413]: synchronized to May 9 01:47:48 x3 dhclient: DHCPREQUEST on eth0 May 9 01:47:48 x3 dhclient: DHCPACK from 23.42.38.201 .. .. a1.txt a2.txt a3.txt a4.txt b1.txt b2.txt b3.txt b4.txt c1.txt c2.txt c3.txt c4.txt
पहला cat कमांड, messages.1, messages.2 और messages.3 का विस्तार करता है और सामग्री प्रदर्शित करता है। और अगले echo स्टेटमेंट में वर्ण और पूर्णांक अनुक्रम संयुक्त और उपयोग किए जाते हैं।
वृद्धि मान के साथ अनुक्रम
Kshell ब्रेस विस्तार में, आप अनुक्रम जनरेट करने के लिए वृद्धि मान का उपयोग कर सकते हैं।
सिंटैक्स:.. ..
incr संख्यात्मक है। आप ऋणात्मक पूर्णांक का उपयोग कर सकते हैं, लेकिन सही चिन्ह start और end के क्रम से अनुमानित होता है।
5. अनुक्रमों में वृद्धि का उपयोग करने का उदाहरण
$ ksh $ echo /var/log/messages.{1..7..2} /var/log/messages.1 /var/log/messages.3 /var/log/messages.5 /var/log/messages.7 $
इसका उपयोग करके आप वैकल्पिक दिनों की लॉगफ़ाइल्स देख सकते हैं।
ब्रेस विस्तार में नुकसान
ब्रेस विस्तार bash वेरिएबल्स का विस्तार नहीं करता, क्योंकि ब्रेस विस्तार शेल विस्तार का पहला चरण है, वेरिएबल बाद में विस्तारित होगा।
6. विस्तार में वेरिएबल्स का उदाहरण
यदि आप निम्नलिखित दो for स्टेटमेंट के आउटपुट को देखते हैं, तो आप उपरोक्त नुकसान की पहचान कर सकते हैं।
$ cat var_seq.sh # अनुक्रमों का उपयोग करके 1 से 4 प्रिंट करें। for i in {1..4} do echo $i done start=1 end=4 # वेरिएबल्स का उपयोग करके अनुक्रम व्यक्त किए गए echo "Sequences expressed using variables" for i in {$start..$end} do echo $i done $ ./var_seq.sh 1 2 3 4 Sequences expressed using variables {1..4}