बैश शैल विस्तार
इनपुट का विश्लेषण करते समय शेल के संचालन में से एक शेल विस्तार है। बैश विभिन्न प्रकार के विस्तार प्रदान करता है। इस लेख में आइए हम एक महत्वपूर्ण विस्तार - "ब्रेस विस्तार" की समीक्षा करें।
यह लेख हमारी चल रही बैश ट्यूटोरियल श्रृंखला का हिस्सा है।
ब्रेस एक्सपेंशन
मनमाना तार उत्पन्न करने के लिए ब्रेस विस्तार का उपयोग किया जाता है। ब्रेस विस्तार आपको एक ही तर्क से कई संशोधित कमांड लाइन तर्क बनाने की अनुमति देता है। निर्दिष्ट स्ट्रिंग्स का उपयोग वैकल्पिक आसपास के प्रस्तावना और पोस्टस्क्रिप्ट के साथ सभी संभावित संयोजन उत्पन्न करने के लिए किया जाता है। प्रस्तावना ब्रेसिज़ के भीतर निहित प्रत्येक स्ट्रिंग के लिए उपसर्ग है, और पोस्टस्क्रिप्ट को फिर प्रत्येक परिणामी स्ट्रिंग में जोड़ा जाता है, जो बाएं से दाएं का विस्तार करता है।
$ echo last{mce,boot,xorg}.log lastmce.log lastboot.log lastxorg.log where last is Preamble and .log is the postscript
उपरोक्त इको स्टेटमेंट आपको तीन लॉग फाइलों को अलग-अलग निर्दिष्ट करने से बचाता है। यदि आप अंतिम बूट लॉग, mce लॉग और xorg लॉग की सामग्री देखना चाहते हैं तो आप ब्रेस विस्तार का उपयोग कर सकते हैं जैसा कि उपरोक्त इको स्टेटमेंट में दिखाया गया है।
<एच3>1. ब्रेस विस्तार का उपयोग करके बैकअप के लिए उदाहरण$ cat bkup.sh set -x # expand the commands 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 के साथ कॉपी करता है। ब्रेसिज़ में पहला तत्व खाली है, इसलिए पहले तत्व में केवल प्रस्तावना होगी।
<एच3>2. ब्रेस विस्तार का उपयोग करके पुनर्स्थापित करने के लिए उदाहरण$ cat restore.sh set -x # expand the commands 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 है जहां दूसरा तत्व खाली है।
साथ ही, अतिरिक्त पढ़ने के लिए बैश शेल फंक्शन पर हमारा पिछला लेख देखें।
<केंद्र> केंद्र> <एच3>3. प्रस्तावना और पोस्टस्क्रिप्ट के बिना ब्रेस विस्तार के लिए उदाहरणयदि कोई प्रस्तावना और पोस्टस्क्रिप्ट नहीं है, तो यह केवल ब्रेसिज़ में दिए गए तत्वों का विस्तार करता है।
$ cat expand.sh echo {oct,hex,dec,bin} $ ./expand.sh oct hex dec bin
वैकल्पिक प्रस्तावना और पोस्टस्क्रिप्ट स्ट्रिंग्स के बिना, परिणाम दिए गए स्ट्रिंग्स की केवल एक स्थान से अलग की गई सूची है
श्रेणियों के लिए ब्रेस विस्तार
ब्रेस विस्तार अनुक्रमों का भी विस्तार करता है। अनुक्रम पूर्णांक या वर्णों के हो सकते हैं।
<एच3>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
पहला कैट कमांड, संदेशों को विस्तृत करता है।1,संदेश।2 और संदेश।3 और सामग्री प्रदर्शित करता है। और अगले इको स्टेटमेंट में कैरेक्टर और इंटीजर सीक्वेंस को मिलाकर इस्तेमाल किया जाता है।
इंक्रीमेंट मान वाले क्रम
kshell ब्रेस एक्सपेंशन में, आप सीक्वेंस जेनरेट करने के लिए इंक्रीमेंट वैल्यू का उपयोग कर सकते हैं।
Syntax: <start>..<end>..<incr>
incr संख्यात्मक है। आप एक ऋणात्मक पूर्णांक का उपयोग कर सकते हैं, लेकिन सही चिह्न प्रारंभ और अंत के क्रम से काटा जाता है।
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 $
इसका उपयोग करके आप वैकल्पिक दिनों की लॉगफाइलें देख सकते हैं।
ब्रेस विस्तार में नुकसान
ब्रेस विस्तार बैश चर का विस्तार नहीं करता है, क्योंकि ब्रेस विस्तार शेल विस्तार का पहला चरण है, बाद में चर का विस्तार किया जाएगा।
<एच3>6. विस्तार में चर के लिए उदाहरणयदि आप कथन के लिए निम्नलिखित दो का आउटपुट देखते हैं, तो आप उपरोक्त नुकसान की पहचान कर सकते हैं।
$ cat var_seq.sh # Print 1 to 4 using sequences. for i in {1..4} do echo $i done start=1 end=4 # Print 1 to 4 using through variables 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}