हमारी चल रही यूनिक्स सेड और यूनिक्स Awk श्रृंखला के समान, हम बैश स्क्रिप्टिंग पर कई लेख पोस्ट करेंगे, जो सभी बैश स्क्रिप्टिंग तकनीकों को व्यावहारिक उदाहरणों के साथ कवर करेगा।
शेल एक प्रोग्राम है, जो यूजर कमांड की व्याख्या करता है। कमांड या तो उपयोगकर्ता द्वारा सीधे दर्ज किए जाते हैं या शेल स्क्रिप्ट नामक फ़ाइल से पढ़े जाते हैं।
शेल को एक गैर-संवादात्मक शेल कहा जाता है, जब यह किसी फ़ाइल से कमांड पढ़ता है और इसे निष्पादित करता है। इस मामले में, शेल स्क्रिप्ट फ़ाइल की प्रत्येक पंक्ति को ऊपर से नीचे तक पढ़ता है, और प्रत्येक कमांड को निष्पादित करता है जैसे कि यह सीधे उपयोगकर्ता द्वारा टाइप किया गया हो।
शेल एक इंटरैक्टिव या गैर-इंटरैक्टिव है या नहीं, यह जानने के लिए बिल्ट इन शेल वैरिएबल $- का मान प्रिंट करें।
# echo $- himBH
नोट:$- वेरिएबल में एक "i" होता है जब शेल इंटरएक्टिव होता है ।
यूनिक्स में विभिन्न प्रकार के शैल हैं। बॉर्न शेल (sh), बॉर्न अगेन शेल (bash), C शेल (csh), कॉर्न शेल (ksh), टेनेक्स C शेल (tcsh)। जैसा कि नीचे दिखाया गया है, एक विशिष्ट शेल कहाँ स्थित है, यह जानने के लिए कौन सा या कहाँ यूनिक्स कमांड का उपयोग करें।
# which bash /bin/bash # whereis bash bash: /bin/bash /usr/share/man/man1/bash.1.gz
आप शेल नाम टाइप करके, शेल के बीच स्विच कर सकते हैं। उदाहरण के लिए, C शेल में स्विच करने के लिए csh टाइप करें।
<केंद्र> केंद्र>खोल स्क्रिप्ट का लेखन और निष्पादन
उदाहरण 1. हैलो वर्ल्ड बैश स्क्रिप्ट
- अपने पसंदीदा संपादक का उपयोग करके फ़ाइल में निम्नलिखित दो पंक्तियों को टाइप करके एक स्क्रिप्ट बनाएं।
- आप फ़ाइल के लिए कोई भी नाम चुन सकते हैं। फ़ाइल का नाम किसी भी यूनिक्स बिल्ट-इन कमांड के समान नहीं होना चाहिए।
- स्क्रिप्ट हमेशा दो अक्षर '#!' से शुरू होती है जिसे शी-बैंग कहा जाता है। यह इंगित करने के लिए है कि फ़ाइल एक स्क्रिप्ट है, और फ़ाइल में शेष पहली पंक्ति द्वारा निर्दिष्ट दुभाषिया (/bin/bash) का उपयोग करके निष्पादित की जानी चाहिए।
- नीचे दिखाए अनुसार स्क्रिप्ट निष्पादित करें। यदि आपको शेल स्क्रिप्ट को निष्पादित करने में कोई समस्या है, तो शेल स्क्रिप्ट निष्पादन ट्यूटोरियल देखें
- जब आप "bash helloworld.sh" कमांड निष्पादित करते हैं, तो यह गैर-संवादात्मक शेल शुरू करता है और फ़ाइल नाम को तर्क के रूप में पास करता है।
- पहली पंक्ति ऑपरेटिंग सिस्टम को बताती है कि स्क्रिप्ट को निष्पादित करने के लिए किस शेल को स्पॉन करना है।
- उपरोक्त उदाहरण में, बैश दुभाषिया जो स्क्रिप्ट की व्याख्या करता है और ऊपर से नीचे तक एक-एक करके कमांड निष्पादित करता है।
- आप स्क्रिप्ट को निष्पादित भी कर सकते हैं, बिना "बैश" के:
- आप (उपयोगकर्ता) को "chmod u+x helloworld.sh" कमांड का उपयोग करके इसे निष्पादित करने की अनुमति देने के लिए स्क्रिप्ट पर अनुमति बदलें।
- स्क्रिप्ट वाली निर्देशिका को PATH पर्यावरण चर में शामिल किया जाना चाहिए। यदि शामिल नहीं है, तो आप स्क्रिप्ट का पूर्ण पथ निर्दिष्ट करके स्क्रिप्ट निष्पादित कर सकते हैं।
- echo एक कमांड है जो केवल हमारे द्वारा दिए गए तर्क को आउटपुट करता है। इसका उपयोग वेरिएबल के मान को प्रिंट करने के लिए भी किया जाता है।
$ cat helloworld.sh #!/bin/bash echo Hello World
$ bash helloworld.sh Hello World
बैश-स्टार्टअप फ़ाइलें
जैसा कि हमने पहले .bash_profile और संबंधित फ़ाइल आलेख के लिए हमारे निष्पादन अनुक्रम में चर्चा की थी, जब बैश को एक इंटरैक्टिव शेल के रूप में लागू किया जाता है, तो यह पहले /etc/profile से कमांड को पढ़ता और निष्पादित करता है। यदि /etc/profile मौजूद नहीं है, तो यह दिए गए क्रम में ~/.bash_profile, ~/.bash_login और ~/.profile से कमांड को पढ़ता और निष्पादित करता है। -नोप्रोफाइल विकल्प का उपयोग तब किया जा सकता है जब शेल को इस व्यवहार को बाधित करने के लिए शुरू किया जाता है।
आमतौर पर आपका bash_profile ~/.bashrc निष्पादित करता है। यदि आप चाहें, तो आप एक स्वागत संदेश दिखा सकते हैं। यह केवल तभी चलता है जब आप पहली बार लॉग इन करते हैं। आप जो चाहें वेरिएबल निर्यात कर सकते हैं, और आप उपनाम सेट कर सकते हैं जो चल रहा होगा और खोल खोलने के बाद उपलब्ध होगा। जब कोई लॉगिन शेल बाहर निकलता है, तो बैश ~/.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. प्रिंट सिस्टम संबंधी जानकारी
जब आप किसी इंटरैक्टिव शेल में लॉग इन करते हैं, तो आप सर्वर में स्थापित कर्नेल का नाम, बैश संस्करण, सर्वर में अपटाइम और समय दिखा सकते हैं।
$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 : "; dateलास्टलॉग | ग्रेप "रूट" | awk {'प्रिंट" से अंतिम लॉगिन:"$3
प्रिंट "अंतिम लॉगिन दिनांक और समय:",$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 2010अंतिम लॉगिन यहां से:शशिकला-लैपटॉप
अंतिम लॉगिन तिथि और समय:मंगल 22 फरवरी 11:24:01 +0100 2010
उदाहरण 5. स्टार्टअप के दौरान चर निर्यात करें और उपनाम सेट करें
सबसे आम कमांड जो आप अपनी .bashrc और .bash_profile फ़ाइलों में उपयोग करेंगे, वे निर्यात और उपनाम कमांड हैं।
एक उपनाम बस पाठ के एक टुकड़े को दूसरे के लिए प्रतिस्थापित कर रहा है। जब आप एक उपनाम चलाते हैं, तो यह केवल आपके द्वारा टाइप की गई चीज़ों को बदल देता है जो उपनाम के बराबर है। उदाहरण के लिए, यदि आप फाइलों/फ़ोल्डरों को रंगों के साथ सूचीबद्ध करने के लिए ls कमांड के लिए उपनाम सेट करना चाहते हैं, तो निम्न कार्य करें:
alias ls 'ls --color=tty'यदि आप इस कमांड को स्टार्ट-अप फाइलों में से किसी एक में जोड़ते हैं, तो आप ls कमांड निष्पादित कर सकते हैं, जहां इसे स्वचालित रूप से ls –color=tty कमांड से बदल दिया जाएगा।
पर्यावरण चर सेट करने के लिए निर्यात कमांड का उपयोग किया जाता है। सिस्टम, या अन्य अनुप्रयोगों द्वारा विभिन्न पर्यावरण चर का उपयोग किया जाता है। वे बस पैरामीटर सेट करने का एक तरीका हैं जिसे कोई भी एप्लिकेशन/स्क्रिप्ट पढ़ सकता है। यदि आप निर्यात कमांड के बिना एक चर सेट करते हैं, तो वह चर केवल उस विशेष प्रक्रिया के लिए मौजूद है।
नीचे दिए गए उदाहरण में, यह पर्यावरण चर HISTSIZE को निर्यात कर रहा है। # से शुरू होने वाली लाइन एक कमेंट लाइन है।
$ cat /etc/profile alias ls 'ls --color=tty' # Setup some environment variables. export HISTSIZE=1000 PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc export PATH export SVN_SH=${SVN_RSH-ssh}