हमारे चल रहे Unix Sed और Unix Awk सीरीज़ के समान, हम Bash स्क्रिप्टिंग पर कई लेख पोस्ट करेंगे, जो व्यावहारिक उदाहरणों के साथ सभी Bash स्क्रिप्टिंग तकनीकों को कवर करेंगे।
शेल एक प्रोग्राम है, जो उपयोगकर्ता कमांड्स की व्याख्या करता है। कमांड्स या तो उपयोगकर्ता द्वारा सीधे दर्ज की जाती हैं या शेल स्क्रिप्ट नामक फ़ाइल से पढ़ी जाती हैं।
शेल को इंटरैक्टिव शेल कहा जाता है, जब यह उपयोगकर्ता से सीधे इनपुट पढ़ता है।
शेल को नॉन-इंटरैक्टिव शेल कहा जाता है, जब यह फ़ाइल से कमांड्स पढ़ता है और उन्हें निष्पादित करता है। इस मामले में, शेल स्क्रिप्ट फ़ाइल की प्रत्येक लाइन को ऊपर से नीचे तक पढ़ता है, और प्रत्येक कमांड को निष्पादित करता है जैसे कि इसे सीधे उपयोगकर्ता द्वारा टाइप किया गया हो।
बिल्ट-इन शेल वेरिएबल $- का मान प्रिंट करें, यह जानने के लिए कि शेल इंटरैक्टिव है या नॉन-इंटरैक्टिव।
# echo $- himBH
नोट: $- वेरिएबल में "i" होता है जब शेल इंटरैक्टिव होता है।
Unix में विभिन्न प्रकार के शेल्स हैं। बॉर्न शेल (sh), बॉर्न अगेन शेल (bash), C शेल (csh), Korn शेल (ksh), Tenex C शेल (tcsh)। जिस या whereis यूनिक्स कमांड्स का उपयोग करके पता करें कि एक विशिष्ट शेल कहां स्थित है जैसा कि नीचे दिखाया गया है।
# which bash /bin/bash # whereis bash bash: /bin/bash /usr/share/man/man1/bash.1.gz
शेल नाम टाइप करके शेल्स के बीच स्विच कर सकते हैं। उदाहरण के लिए, C शेल पर स्विच करने के लिए csh टाइप करें।
शेल स्क्रिप्ट लिखना और निष्पादन
उदाहरण 1. Hello World Bash स्क्रिप्ट
- अपने पसंदीदा एडिटर का उपयोग करके फ़ाइल में निम्नलिखित दो लाइनें टाइप करके एक स्क्रिप्ट बनाएं।
- आप फ़ाइल के लिए कोई भी नाम चुन सकते हैं। फ़ाइल नाम किसी भी यूनिक्स बिल्ट-इन कमांड के समान नहीं होना चाहिए।
- स्क्रिप्ट हमेशा दो वर्ण '#!' से शुरू होती है जिसे शे-बैंग कहा जाता है। यह इंगित करने के लिए है कि फ़ाइल एक स्क्रिप्ट है, और फ़ाइल में पहली लाइन के शेष द्वारा निर्दिष्ट इंटरप्रेटर (/bin/bash) का उपयोग करके निष्पादित की जानी चाहिए।
- नीचे दिखाए अनुसार स्क्रिप्ट निष्पादित करें। यदि आपको शेल स्क्रिप्ट निष्पादित करने में कोई समस्या है, तो शेल स्क्रिप्ट निष्पादन ट्यूटोरियल देखें
- जब आप कमांड "bash helloworld.sh" निष्पादित करते हैं, तो यह नॉन-इंटरैक्टिव शेल शुरू करता है और फ़ाइलनाम को इसके आर्ग्यूमेंट के रूप में पास करता है।
- पहली लाइन ऑपरेटिंग सिस्टम को बताती है कि स्क्रिप्ट को निष्पादित करने के लिए कौन सा शेल स्पॉन करना है।
- उपरोक्त उदाहरण में, bash इंटरप्रेटर जो स्क्रिप्ट की व्याख्या करता है और कमांड्स को ऊपर से नीचे एक-एक करके निष्पादित करता है।
- आप स्क्रिप्ट को अग्रणी "bash" के बिना भी निष्पादित कर सकते हैं:
- स्क्रिप्ट पर अनुमति बदलें ताकि आप (उपयोगकर्ता) इसे निष्पादित कर सकें, कमांड "chmod u+x helloworld.sh" का उपयोग करके।
- स्क्रिप्ट वाली निर्देशिका PATH पर्यावरण वेरिएबल में शामिल होनी चाहिए। यदि शामिल नहीं है, तो आप स्क्रिप्ट के पूर्ण पथ को निर्दिष्ट करके स्क्रिप्ट निष्पादित कर सकते हैं।
- echo एक कमांड है जो केवल हमारे द्वारा दिए गए आर्ग्यूमेंट को आउटपुट करता है। इसका उपयोग वेरिएबल के मान को प्रिंट करने के लिए भी किया जाता है।
$ cat helloworld.sh #!/bin/bash echo Hello World
$ bash helloworld.sh Hello World
Bash-स्टार्टअप फ़ाइलें
जैसा कि हमने पहले .bash_profile और संबंधित फ़ाइलों के लिए निष्पादन क्रम पर अपने लेख में चर्चा की थी, जब bash को इंटरैक्टिव शेल के रूप में आमंत्रित किया जाता है, तो यह पहले /etc/profile से कमांड्स पढ़ता है और निष्पादित करता है। यदि /etc/profile मौजूद नहीं है, तो यह दिए गए क्रम में ~/.bash_profile, ~/.bash_login और ~/.profile से कमांड्स पढ़ता है और निष्पादित करता है। जब शेल शुरू होता है तो --noprofile विकल्प का उपयोग इस व्यवहार को रोकने के लिए किया जा सकता है।
आमतौर पर आपका bash_profile ~/.bashrc निष्पादित करता है। यदि आप चाहें, तो आप एक स्वागत संदेश दिखा सकते हैं। यह केवल तब चलता है जब आप पहली बार लॉगिन करते हैं। आप जो भी वेरिएबल्स चाहते हैं उन्हें निर्यात कर सकते हैं, और आप aliases सेट कर सकते हैं जो शेल खोलने पर चल रहे और उपलब्ध होंगे। जब एक लॉगिन शेल बाहर निकलता है, तो Bash ~/.bash_logout फ़ाइल से कमांड्स पढ़ता है और निष्पादित करता है।
उदाहरण 2. लॉगिन करते समय स्वागत संदेश प्रिंट करें
अपनी bash_profile फ़ाइल में निम्नलिखित सामग्री टाइप करें। यदि फ़ाइल मौजूद नहीं है, तो नीचे दी गई सामग्री के साथ एक फ़ाइल बनाएं।
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."
जब आप इंटरैक्टिव शेल में लॉगिन करते हैं, तो आप नीचे दिखाए अनुसार स्वागत संदेश देखेंगे।
login as: root root@dev-db's password: Welcome on dev-db
उदाहरण 3. सिस्टम संबंधी जानकारी प्रिंट करें
जब आप इंटरैक्टिव शेल में लॉगिन करते हैं, तो आप सर्वर में इंस्टॉल कर्नेल का नाम, bash संस्करण, अपटाइम और समय दिखा सकते हैं।
$cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname." echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; date
जब आप एक इंटरैक्टिव शेल लॉन्च करते हैं, तो यह नीचे दिखाए अनुसार संदेश प्रिंट करता है।
login as: root root@dev-db's password: Welcome on dev-db Kernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010
उदाहरण 4. अंतिम लॉगिन विवरण प्रिंट करें
यदि एक ही मशीन पर एक ही लॉगिन के साथ कई उपयोगकर्ता उपयोग कर रहे हैं, तो विवरण जैसे कि मशीन जिससे अंतिम लॉगिन हुआ, और वह समय जब उन्होंने लॉगिन किया, सबसे उपयोगी विवरण होंगे। यह उदाहरण इंटरैक्टिव शेल शुरू होने के दौरान अंतिम लॉगिन विवरण प्रिंट करता है।
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; datelastlog | grep "root" | awk {'print "Last login from : "$3
print "Last Login Date & Time: ",$4,$5,$6,$7,$8,$9;}'
स्टार्टअप के दौरान, आपको नीचे दिखाए अनुसार संदेश मिलेगा।login as: root root@dev-db's password: Welcome on dev-dbKernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010Last login from : sasikala-laptop
Last Login Date & Time: Tue Feb 22 11:24:01 +0100 2010
उदाहरण 5. स्टार्टअप के दौरान वेरिएबल्स निर्यात करें और aliases सेट करें
.bashrc और .bash_profile फ़ाइलों में आपके द्वारा उपयोग की जाने वाली सबसे आम कमांड्स export और alias कमांड हैं।
एक alias केवल एक टेक्स्ट को दूसरे के लिए प्रतिस्थापित करना है। जब आप एक alias चलाते हैं, तो यह बस आपके द्वारा टाइप किए गए को उससे बदल देता है जो alias के बराबर है। उदाहरण के लिए, यदि आप ls कमांड के लिए एक alias सेट करना चाहते हैं ताकि फ़ाइलों/फ़ोल्डर्स को रंगों के साथ सूचीबद्ध किया जाए, तो निम्नलिखित करें:
alias ls 'ls --color=tty'यदि आप इस कमांड को स्टार्टअप फ़ाइलों में से एक में जोड़ते हैं, तो आप ls कमांड निष्पादित कर सकते हैं, जहां यह स्वचालित रूप से ls --color=tty कमांड से बदल जाएगा।
Export कमांड का उपयोग पर्यावरण वेरिएबल सेट करने के लिए किया जाता है। विभिन्न पर्यावरण वेरिएबल्स सिस्टम या अन्य एप्लिकेशन द्वारा उपयोग किए जाते हैं। वे केवल पैरामीटर्स सेट करने का एक तरीका हैं जिन्हें कोई भी एप्लिकेशन/स्क्रिप्ट पढ़ सकता है। यदि आप export कमांड के बिना एक वेरिएबल सेट करते हैं, तो वह वेरिएबल केवल उस विशेष प्रक्रिया के लिए मौजूद होता है।
नीचे दिए गए उदाहरण में, यह पर्यावरण वेरिएबल HISTSIZE निर्यात कर रहा है। # से शुरू होने वाली लाइन एक टिप्पणी लाइन है।
$ cat /etc/profile alias ls 'ls --color=tty' # कुछ पर्यावरण वेरिएबल सेट करें। export HISTSIZE=1000 PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc export PATH export SVN_SH=${SVN_RSH-ssh}