लिनक्स में, प्रोसेस ऑटोमेशन शेल स्क्रिप्टिंग पर बहुत अधिक निर्भर करता है। इसमें कमांड की एक श्रृंखला वाली फ़ाइल बनाना शामिल है जिसे एक साथ निष्पादित किया जा सकता है।
इस लेख में, हम बैश स्क्रिप्टिंग की मूल बातें से शुरू करेंगे जिसमें वेरिएबल, कमांड, इनपुट/आउटपुट, और डिबगिंग शामिल हैं। हम रास्ते में प्रत्येक के उदाहरण भी देखेंगे।
चलिए शुरू करते हैं। 🚀
विषय सूची
- पूर्वापेक्षाएँ
- परिचय
- बैश स्क्रिप्टिंग की परिभाषा
- बैश स्क्रिप्टिंग के फायदे
- बैश शेल और कमांड लाइन इंटरफेस का अवलोकन
- बैश स्क्रिप्टिंग के साथ कैसे शुरू करें
- कमांड लाइन से बैश कमांड कैसे चलाएं
- बैश स्क्रिप्ट कैसे बनाएं और निष्पादित करें
बैश स्क्रिप्टिंग मूल बातें
बैश स्क्रिप्टिंग में कमेंट्स
- बैश में वेरिएबल और डेटा प्रकार
- बैश स्क्रिप्ट में इनपुट और आउटपुट
- बेसिक बैश कमांड (echo, read, आदि)
शर्ती कथन (if/else)
बैश में लूपिंग और ब्रांचिंग
- व्हाइल लूप
- फॉर लूप
- केस स्टेटमेंट
- cron का उपयोग करके स्क्रिप्ट कैसे शेड्यूल करें
- बैश स्क्रिप्ट को डीबग और समस्या निवारण कैसे करें
- निष्कर्ष
- बैश स्क्रिप्टिंग के बारे में अधिक जानने के लिए संसाधन
पूर्वापेक्षाएँ
इस ट्यूटोरियल के साथ चलने के लिए, आपके पास निम्नलिखित एक्सेस होना चाहिए:
- कमांड लाइन तक पहुंच के साथ लिनक्स का एक रनिंग वर्जन।
यदि आपके पास लिनक्स इंस्टॉल नहीं है या आप अभी शुरुआत कर रहे हैं, तो आप Replit के माध्यम से आसानी से लिनक्स कमांड लाइन तक पहुंच सकते हैं। Replit एक ब्राउज़र-आधारित IDE है जहां आप कुछ मिनटों में बैश शेल तक पहुंच सकते हैं।
आप WSL (विंडोज सबसिस्टम फॉर लिनक्स) का उपयोग करके अपने विंडोज सिस्टम के ऊपर लिनक्स भी इंस्टॉल कर सकते हैं। इसके लिए यहां एक ट्यूटोरियल है।
परिचय
बैश स्क्रिप्टिंग की परिभाषा
एक बैश स्क्रिप्ट एक फ़ाइल है जिसमें कमांड का एक क्रम होता है जिसे बैश प्रोग्राम द्वारा लाइन दर लाइन निष्पादित किया जाता है। यह आपको कमांड लाइन का उपयोग करके एक विशिष्ट डायरेक्टरी में नेविगेट करने, एक फ़ोल्डर बनाने, और एक प्रोसेस लॉन्च करने जैसे कार्यों की एक श्रृंखला करने की अनुमति देता है।
इन कमांड को स्क्रिप्ट में सहेजकर, आप चरणों के उसी क्रम को कई बार दोहरा सकते हैं और स्क्रिप्ट चलाकर उन्हें निष्पादित कर सकते हैं।
बैश स्क्रिप्टिंग के फायदे
बैश स्क्रिप्टिंग सिस्टम एडमिनिस्ट्रेशन कार्यों को स्वचालित करने, सिस्टम संसाधनों को प्रबंधित करने, और यूनिक्स/लिनक्स सिस्टम में अन्य नियमित कार्यों को करने के लिए एक शक्तिशाली और बहुमुखी उपकरण है। शेल स्क्रिप्टिंग के कुछ फायदे हैं:
- स्वचालन: शेल स्क्रिप्ट आपको दोहराए जाने वाले कार्यों और प्रक्रियाओं को स्वचालित करने की अनुमति देती हैं, जिससे समय की बचत होती है और मैन्युअल निष्पादन से होने वाली त्रुटियों का जोखिम कम होता है।
- पोर्टेबिलिटी: शेल स्क्रिप्ट विभिन्न प्लेटफॉर्म और ऑपरेटिंग सिस्टम पर चल सकती हैं, जिनमें यूनिक्स, लिनक्स, macOS, और एमुलेटर या वर्चुअल मशीन के माध्यम से विंडोज भी शामिल हैं।
- लचीलापन: शेल स्क्रिप्ट अत्यधिक अनुकूलन योग्य हैं और विशिष्ट आवश्यकताओं के अनुरूप आसानी से संशोधित की जा सकती हैं। उन्हें अन्य प्रोग्रामिंग भाषाओं या उपयोगिताओं के साथ जोड़कर अधिक शक्तिशाली स्क्रिप्ट बनाया जा सकता है।
- पहुंच: शेल स्क्रिप्ट लिखना आसान है और इसके लिए किसी विशेष टूल या सॉफ़्टवेयर की आवश्यकता नहीं होती। इन्हें किसी भी टेक्स्ट एडिटर से संपादित किया जा सकता है, और अधिकांश ऑपरेटिंग सिस्टम में बिल्ट-इन शेल इंटरप्रेटर होता है।
- एकीकरण: शेल स्क्रिप्ट को अन्य टूल और एप्लिकेशन के साथ एकीकृत किया जा सकता है, जैसे डेटाबेस, वेब सर्वर, और क्लाउड सेवाएं, जिससे अधिक जटिल स्वचालन और सिस्टम प्रबंधन कार्य संभव होते हैं।
- डिबगिंग: शेल स्क्रिप्ट को डीबग करना आसान है, और अधिकांश शेल में बिल्ट-इन डिबगिंग और त्रुटि-रिपोर्टिंग टूल होते हैं जो समस्याओं को जल्दी पहचानने और ठीक करने में मदद कर सकते हैं।
बैश शेल और कमांड लाइन इंटरफेस का अवलोकन
"शेल" और "बैश" शब्दों का परस्पर उपयोग किया जाता है। लेकिन दोनों के बीच एक सूक्ष्म अंतर है।
"शेल" शब्द एक ऐसे प्रोग्राम को संदर्भित करता है जो ऑपरेटिंग सिस्टम के साथ इंटरैक्ट करने के लिए कमांड-लाइन इंटरफेस प्रदान करता है। बैश (बॉर्न-अगेन शेल) सबसे अधिक उपयोग किए जाने वाले यूनिक्स/लिनक्स शेल में से एक है और कई लिनक्स वितरण में डिफ़ॉल्ट शेल है।
एक शेल या कमांड-लाइन इंटरफेस ऐसा दिखता है:
शेल उपयोगकर्ता से कमांड स्वीकार करता है और आउटपुट प्रदर्शित करता है
उपरोक्त आउटपुट में, zaira@Zaira शेल प्रॉम्प्ट है। जब शेल का इंटरैक्टिव रूप से उपयोग किया जाता है, तो यह उपयोगकर्ता से कमांड की प्रतीक्षा करते समय $ प्रदर्शित करता है।
यदि शेल रूट के रूप में चल रहा है (प्रशासनिक अधिकारों वाला उपयोगकर्ता), तो प्रॉम्प्ट # में बदल जाता है। सुपरयूजर शेल प्रॉम्प्ट ऐसा दिखता है:
[root@host ~]#
हालांकि बैश एक प्रकार का शेल है, अन्य शेल भी उपलब्ध हैं, जैसे कॉर्न शेल (ksh), C शेल (csh), और Z शेल (zsh)। प्रत्येक शेल का अपना सिंटैक्स और सुविधाओं का सेट होता है, लेकिन वे सभी ऑपरेटिंग सिस्टम के साथ इंटरैक्ट करने के लिए कमांड-लाइन इंटरफेस प्रदान करने के सामान्य उद्देश्य को साझा करते हैं।
आप ps कमांड का उपयोग करके अपने शेल प्रकार का निर्धारण कर सकते हैं:
ps
यहां मेरा आउटपुट है:
शेल प्रकार की जांच। मैं बैश शेल का उपयोग कर रहा हूँ
सारांश में, जबकि "शेल" एक व्यापक शब्द है जो कमांड-लाइन इंटरफेस प्रदान करने वाले किसी भी प्रोग्राम को संदर्भित करता है, "बैश" एक विशिष्ट प्रकार का शेल है जो यूनिक्स/लिनक्स सिस्टम में व्यापक रूप से उपयोग किया जाता है।
नोट: इस ट्यूटोरियल में, हम "बैश" शेल का उपयोग करेंगे।
बैश स्क्रिप्टिंग के साथ कैसे शुरू करें
कमांड लाइन से बैश कमांड चलाना
जैसा कि पहले उल्लेख किया गया है, शेल प्रॉम्प्ट ऐसा दिखता है:
[username@host ~]$
आप $ साइन के बाद कोई भी कमांड दर्ज कर सकते हैं और टर्मिनल पर आउटपुट देख सकते हैं।
आम तौर पर, कमांड इस सिंटैक्स का पालन करते हैं:
command [OPTIONS] arguments
आइए कुछ बुनियादी बैश कमांड पर चर्चा करें और उनका आउटपुट देखें। साथ चलना सुनिश्चित करें :)
date: वर्तमान तारीख प्रदर्शित करता है
zaira@Zaira:~/shell-tutorial$ date Tue Mar 14 13:08:57 PKT 2023
pwd: वर्तमान कार्यशील डायरेक्टरी प्रदर्शित करता है।
zaira@Zaira:~/shell-tutorial$ pwd /home/zaira/shell-tutorial
ls: वर्तमान डायरेक्टरी की सामग्री सूचीबद्ध करता है।
zaira@Zaira:~/shell-tutorial$ ls check_plaindrome.sh count_odd.sh env log temp
echo: टेक्स्ट की एक स्ट्रिंग या वेरिएबल के मान को टर्मिनल पर प्रिंट करता है।
zaira@Zaira:~/shell-tutorial$ echo "Hello bash" Hello bash
आप किसी कमांड के मैनुअल को man कमांड से हमेशा देख सकते हैं।
उदाहरण के लिए, ls का मैनुअल ऐसा दिखता है:
आप
man का उपयोग करके कमांड के विकल्पों को विस्तार से देख सकते हैं
बैश स्क्रिप्ट कैसे बनाएं और निष्पादित करें
स्क्रिप्ट नामकरण परंपराएं
नामकरण परंपरा के अनुसार, बैश स्क्रिप्ट .sh से समाप्त होती हैं। हालांकि, बैश स्क्रिप्ट sh एक्सटेंशन के बिना भी पूरी तरह से चल सकती हैं।
शेबैंग जोड़ना
बैश स्क्रिप्ट एक शेबैंग से शुरू होती हैं। शेबैंग बैश # और बैंग ! का संयोजन है जिसके बाद बैश शेल पथ आता है। यह स्क्रिप्ट की पहली लाइन है। शेबैंग शेल को इसे बैश शेल के माध्यम से निष्पादित करने के लिए कहता है। शेबैंग बस बैश इंटरप्रेटर का एक पूर्ण पथ है।
नीचे शेबैंग स्टेटमेंट का एक उदाहरण है।
#!/bin/bash
आप कमांड का उपयोग करके अपना बैश शेल पथ ढूंढ सकते हैं (जो उपरोक्त से भिन्न हो सकता है):
which bash
हमारी पहली बैश स्क्रिप्ट बनाना
हमारी पहली स्क्रिप्ट उपयोगकर्ता से एक पथ दर्ज करने के लिए कहती है। बदले में, उसकी सामग्री सूचीबद्ध होगी।
vi कमांड का उपयोग करके run_all.sh नाम की एक फ़ाइल बनाएं। आप अपनी पसंद के किसी भी एडिटर का उपयोग कर सकते हैं।
vi run_all.sh
अपनी फ़ाइल में निम्नलिखित कमांड जोड़ें और इसे सहेजें:
#!/bin/bash echo "Today is " `date` echo -e "\nenter the path to directory" read the_path echo -e "\n you path has the following files and folders: " ls $the_path
आइए स्क्रिप्ट को लाइन दर लाइन गहराई से देखें। मैं वही स्क्रिप्ट फिर से प्रदर्शित कर रहा हूँ, लेकिन इस बार लाइन नंबर के साथ।
1 #!/bin/bash 2 echo "Today is " `date` 3 4 echo -e "\nenter the path to directory" 5 read the_path 6 7 echo -e "\n you path has the following files and folders: " 8 ls $the_path
- लाइन #1: शेबैंग (
#!/bin/bash) बैश शेल पथ की ओर इंगित करता है। - लाइन #2:
echoकमांड वर्तमान तारीख और समय को टर्मिनल पर प्रदर्शित कर रहा है। ध्यान दें किdateबैकटिक्स में है। - लाइन #4: हम चाहते हैं कि उपयोगकर्ता एक वैध पथ दर्ज करे।
- लाइन #5:
readकमांड इनपुट पढ़ता है और इसे वेरिएबलthe_pathमें संग्रहीत करता है। - लाइन #8:
lsकमांड संग्रहीत पथ के साथ वेरिएबल लेता है और वर्तमान फाइलों और फ़ोल्डरों को प्रदर्शित करता है।
बैश स्क्रिप्ट निष्पादित करना
स्क्रिप्ट को निष्पादन योग्य बनाने के लिए, इस कमांड का उपयोग करके अपने उपयोगकर्ता को निष्पादन अधिकार दें:
chmod u+x run_all.sh
यहां,
chmodवर्तमान उपयोगकर्ता के लिए फ़ाइल के स्वामित्व को संशोधित करता है :u।+xवर्तमान उपयोगकर्ता को निष्पादन अधिकार जोड़ता है। इसका अर्थ है कि मालिक उपयोगकर्ता अब स्क्रिप्ट चला सकता है।run_all.shवह फ़ाइल है जिसे हम चलाना चाहते हैं।
आप स्क्रिप्ट को उल्लिखित किसी भी विधि का उपयोग करके चला सकते हैं:
sh run_all.shbash run_all.sh./run_all.sh
इसे एक्शन में देखते हैं 🚀
बैश स्क्रिप्टिंग मूल बातें
बैश स्क्रिप्टिंग में कमेंट्स # से शुरू होते हैं। इसका अर्थ है कि # से शुरू होने वाली कोई भी लाइन एक कमेंट है और इंटरप्रेटर द्वारा अनदेखी की जाएगी।
कमेंट्स कोड को डॉक्यूमेंट करने में बहुत मददगार होते हैं, और दूसरों को कोड समझने में मदद करने के लिए उन्हें जोड़ना एक अच्छी प्रथा है।
ये कमेंट्स के उदाहरण हैं:
# This is an example comment # Both of these lines will be ignored by the interpreter
बैश में वेरिएबल और डेटा प्रकार
वेरिएबल आपको डेटा संग्रहीत करने देते हैं। आप अपनी स्क्रिप्ट में डेटा को पढ़ने, एक्सेस करने, और हेरफेर करने के लिए वेरिएबल का उपयोग कर सकते हैं।
बैश में कोई डेटा प्रकार नहीं हैं। बैश में, एक वेरिएबल संख्यात्मक मान, व्यक्तिगत वर्ण, या वर्णों की स्ट्रिंग संग्रहीत करने में सक्षम है।
बैश में, आप निम्न तरीकों से वेरिएबल मान का उपयोग और सेट कर सकते हैं:
- मान को सीधे असाइन करें:
country=Pakistan
- कमांड प्रतिस्थापन का उपयोग करके किसी प्रोग्राम या कमांड से प्राप्त आउटपुट के आधार पर मान असाइन करें। ध्यान दें कि मौजूदा वेरिएबल के मान को एक्सेस करने के लिए
$आवश्यक है।
same_country=$country
वेरिएबल मान तक पहुंचने के लिए, वेरिएबल नाम में $ जोड़ें।
zaira@Zaira:~$ country=Pakistan zaira@Zaira:~$ echo $country Pakistan zaira@Zaira:~$ new_country=$country zaira@Zaira:~$ echo $new_country Pakistan
वेरिएबल नामकरण परंपराएं
बैश स्क्रिप्टिंग में, निम्नलिखित वेरिएबल नामकरण परंपराएं हैं:
- वेरिएबल नाम अक्षर या अंडरस्कोर (
_) से शुरू होने चाहिए। - वेरिएबल नाम में अक्षर, संख्या, और अंडरस्कोर (
_) हो सकते हैं। - वेरिएबल नाम केस-सेंसिटिव हैं।
- वेरिएबल नाम में स्पेस या विशेष वर्ण नहीं होने चाहिए।
- वर्णनात्मक नामों का उपयोग करें जो वेरिएबल के उद्देश्य को दर्शाते हों।
- आरक्षित कीवर्ड का उपयोग करने से बचें, जैसे
if,then,else,fi, आदि को वेरिएबल नाम के रूप में।
यहां बैश में वैध वेरिएबल नाम के कुछ उदाहरण दिए गए हैं:
name count _var myVar MY_VAR
और यहां अमान्य वेरिएबल नाम के कुछ उदाहरण हैं:
2ndvar (वेरिएबल नाम संख्या से शुरू होता है) my var (वेरिएबल नाम में स्पेस है) my-var (वेरिएबल नाम में हाइफ़न है)
इन नामकरण परंपराओं का पालन करने से बैश स्क्रिप्ट अधिक पठनीय और रखरखाव में आसान बनती हैं।
बैश स्क्रिप्ट में इनपुट और आउटपुट
इनपुट एकत्र करना
इस खंड में, हम अपनी स्क्रिप्ट को इनपुट प्रदान करने के कुछ तरीकों पर चर्चा करेंगे।
- उपयोगकर्ता इनपुट पढ़ना और इसे वेरिएबल में संग्रहीत करना
हम read कमांड का उपयोग करके उपयोगकर्ता इनपुट पढ़ सकते हैं।
#!/bin/bash echo "What's your name?" read entered_name echo -e "\nWelcome to bash tutorial" $entered_name
- फ़ाइल से पढ़ना
यह कोड input.txt नाम की फ़ाइल से प्रत्येक लाइन पढ़ता है और इसे टर्मिनल पर प्रिंट करता है। हम इस लेख में बाद में व्हाइल लूप का अध्ययन करेंगे।
while read line do echo $line done < input.txt
- कमांड लाइन आर्गुमेंट
बैश स्क्रिप्ट या फ़ंक्शन में, $1 प्रारंभिक आर्गुमेंट को दर्शाता है, $2 दूसरे आर्गुमेंट को दर्शाता है, और इसी तरह।
यह स्क्रिप्ट नाम को कमांड-लाइन आर्गुमेंट के रूप में लेती है और एक व्यक्तिगत अभिवादन प्रिंट करती है।
echo "Hello, $1!"
हमने Zaira को अपने आर्गुमेंट के रूप में स्क्रिप्ट को आपूर्ति की है।
#!/bin/bash echo "Hello, $1!"
आउटपुट:
आउटपुट प्रदर्शित करना
यहां हम स्क्रिप्ट से आउटपुट प्राप्त करने के कुछ तरीकों पर चर्चा करेंगे।
- टर्मिनल पर प्रिंट करना:
echo "Hello, World!"
यह टर्मिनल पर "Hello, World!" टेक्स्ट प्रिंट करता है।
- फ़ाइल में लिखना:
echo "This is some text." > output.txt
यह "This is some text." टेक्स्ट को output.txt नाम की फ़ाइल में लिखता है। ध्यान दें कि > ऑपरेटर फ़ाइल को ओवरराइट कर देता है यदि उसमें पहले से कुछ सामग्री है।
- फ़ाइल में जोड़ना:
echo "More text." >> output.txt
यह "More text." टेक्स्ट को output.txt फ़ाइल के अंत में जोड़ता है।
- आउटपुट रीडायरेक्ट करना:
ls > files.txt
यह वर्तमान डायरेक्टरी में फ़ाइलों को सूचीबद्ध करता है और आउटपुट को files.txt नाम की फ़ाइल में लिखता है। आप इस तरह किसी भी कमांड के आउटपुट को फ़ाइल में रीडायरेक्ट कर सकते हैं।
बेसिक बैश कमांड (echo, read, आदि)
यहां कुछ सबसे अधिक उपयोग किए जाने वाले बैश कमांड की सूची दी गई है:
cd: डायरेक्टरी को किसी अन्य स्थान पर बदलें।ls: वर्तमान डायरेक्टरी की सामग्री सूचीबद्ध करें।mkdir: एक नई डायरेक्टरी बनाएं।touch: एक नई फ़ाइल बनाएं।rm: फ़ाइल या डायरेक्टरी हटाएं।cp: फ़ाइल या डायरेक्टरी कॉपी करें।mv: फ़ाइल या डायरेक्टरी ले जाएं या नाम बदलें।echo: टर्मिनल पर टेक्स्ट प्रिंट करें।cat: फ़ाइल की सामग्री को जोड़ें और प्रिंट करें।grep: फ़ाइल में पैटर्न खोजें।chmod: फ़ाइल या डायरेक्टरी की अनुमतियां बदलें।sudo: प्रशासनिक विशेषाधिकारों के साथ कमांड चलाएं।df: उपलब्ध डिस्क स्पेस की मात्रा प्रदर्शित करें।history: पहले निष्पादित कमांड की सूची दिखाएं।ps: चल रही प्रक्रियाओं के बारे में जानकारी प्रदर्शित करें।
शर्ती कथन (if/else)
अभिव्यक्तियाँ जो बूलियन परिणाम उत्पन्न करती हैं, या तो true या false, को शर्तें कहा जाता है। ऐसे कथन जो कुछ शर्तों के आधार पर विभिन्न कोड शाखाओं को निष्पादित करने में मदद करते हैं, उन्हें शर्ती कथन कहा जाता है।
if...else सबसे अधिक उपयोग किए जाने वाले शर्ती कथनों में से एक है। अन्य प्रोग्रामिंग भाषाओं की तरह, बैश स्क्रिप्टिंग भी if...else स्टेटमेंट का समर्थन करती है। और हम इसका विस्तार से अध्ययन करेंगे।
if स्टेटमेंट का सिंटैक्स
आप if स्टेटमेंट का विभिन्न तरीकों से उपयोग कर सकते हैं। if स्टेटमेंट की सामान्य संरचना इस प्रकार है:
- केवल
ifस्टेटमेंट का उपयोग:if...then...fi ifके साथelseस्टेटमेंट का उपयोग:if...then...else...fiस्टेटमेंटifके साथ एकाधिकelseस्टेटमेंट का उपयोग:if..elif..else..fi
##
if स्टेटमेंट का उपयोग कैसे करें
जब आप सिंगल if स्टेटमेंट का उपयोग कर रहे हैं, तो सिंटैक्स इस प्रकार है:
if [ condition ] then statement fi
ध्यान दें कि स्पेस सिंटैक्स का हिस्सा हैं और इन्हें हटाया नहीं जाना चाहिए।
आइए एक उदाहरण देखें जहां हम दो नंबरों की तुलना करके यह पता लगा रहे हैं कि पहला नंबर छोटा है या नहीं।
#! /bin/sh a=5 b=30 if [ $a -lt $b ] then echo "a is less than b" fi
यदि आप उपरोक्त स्निपेट चलाते हैं, तो शर्त if [ $a -lt $b ] True का मूल्यांकन करती है, और if स्टेटमेंट के अंदर का स्टेटमेंट निष्पादित होता है
आउटपुट:
a is less than b
if .. else स्टेटमेंट का उपयोग कैसे करें
जब आप if स्टेटमेंट का उपयोग कर रहे हैं और दूसरी शर्त जोड़ना चाहते हैं, तो सिंटैक्स इस प्रकार है:
if [ condition ] then statement else do this by default fi
आइए एक उदाहरण देखें जहां हम पता लगाना चाहते हैं कि पहला नंबर दूसरे से बड़ा है या छोटा। यहां, if [ $a -lt $b ] का मूल्यांकन false होता है, जिससे कोड का else भाग चलता है।
#! /bin/sh a=99 b=45 if [ $a -lt $b ] then echo "a is less than b" else echo "a is greater than b" fi
आउटपुट:
a is greater than b
if..elif..else स्टेटमेंट का उपयोग कैसे करें
मान लीजिए आप कोड को डायनामिक बनाने के लिए आगे की शर्तों और तुलनाओं को जोड़ना चाहते हैं। इस मामले में, सिंटैक्स ऐसा दिखेगा:
if [ condition ] then statement elif [ condition ] then statement else do this by default fi
सार्थक तुलना बनाने के लिए, हम AND -a और OR -o का भी उपयोग कर सकते हैं।
इस उदाहरण में, हम इन शर्तों का उपयोग करके त्रिकोण के प्रकार का निर्धारण करेंगे:
Scalene: एक त्रिकोण जहां हर तरफ की लंबाई अलग होती है।Isosceles: एक त्रिकोण जहां 2 तरफ बराबर होती हैं।Equilateral: एक त्रिकोण जहां सभी तरफ बराबर होती हैं।
read a read b read c if [ $a == $b -a $b == $c -a $a == $c ] then echo EQUILATERAL elif [ $a == $b -o $b == $c -o $a == $c ] then echo ISOSCELES else echo SCALENE fi
ऊपर दिए गए उदाहरण में, स्क्रिप्ट उपयोगकर्ता से त्रिकोण की तीनों भुजाएं दर्ज करने के लिए कहेगी। अगला, यह भुजाओं की तुलना करेगा और त्रिकोण का प्रकार तय करेगा।
3 4 5 SCALENE
बैश में लूपिंग और ब्रांचिंग
व्हाइल लूप
व्हाइल लूप एक शर्त की जांच करता है और तब तक लूप करता है जब तक शर्त true रहती है। हमें लूप निष्पादन को नियंत्रित करने के लिए एक काउंटर स्टेटमेंट प्रदान करना होगा जो काउंटर को बढ़ाता है।
नीचे दिए गए उदाहरण में, (( i += 1 )) काउंटर स्टेटमेंट है जो i के मान को बढ़ाता है। लूप ठीक 10 बार चलेगा।
#!/bin/bash i=1 while [[ $i -le 10 ]] ; do echo "$i" (( i += 1 )) done
फॉर लूप
for लूप, while लूप की तरह, आपको स्टेटमेंट को एक विशिष्ट संख्या में निष्पादित करने की अनुमति देता है। प्रत्येक लूप अपने सिंटैक्स और उपयोग में भिन्न होता है।
नीचे दिए गए उदाहरण में, लूप 5 बार पुनरावृति करेगा।
#!/bin/bash for i in {1..5} do echo $i done
केस स्टेटमेंट
बैश में, केस स्टेटमेंट का उपयोग दिए गए मान की पैटर्न की सूची के साथ तुलना करने और पहले पैटर्न के आधार पर कोड के एक ब्लॉक को निष्पादित करने के लिए किया जाता है जो मेल खाता है। बैश में केस स्टेटमेंट का सिंटैक्स इस प्रकार है:
case expression in pattern1) # code to execute if expression matches pattern1 ;; pattern2) # code to execute if expression matches pattern2 ;; pattern3) # code to execute if expression matches pattern3 ;; *) # code to execute if none of the above patterns match expression ;; esac
यहां, "expression" वह मान है जिसकी हम तुलना करना चाहते हैं, और "pattern1", "pattern2", "pattern3", आदि वे पैटर्न हैं जिनके खिलाफ हम इसकी तुलना करना चाहते हैं।
डबल सेमीकोलन ";;" प्रत्येक पैटर्न के लिए निष्पादित करने के लिए कोड के प्रत्येक ब्लॉक को अलग करता है। एस्टेरिस्क "*" डिफ़ॉल्ट केस को दर्शाता है, जो तब निष्पादित होता है जब कोई भी निर्दिष्ट पैटर्न अभिव्यक्ति से मेल नहीं खाता।
आइए एक उदाहरण देखें।
fruit="apple" case $fruit in "apple") echo "This is a red fruit." ;; "banana") echo "This is a yellow fruit." ;; "orange") echo "This is an orange fruit." ;; *) echo "Unknown fruit." ;; esac
इस उदाहरण में, चूंकि "fruit" का मान "apple" है, पहला पैटर्न मेल खाता है, और कोड का वह ब्लॉक निष्पादित होता है जो "This is a red fruit." को इको करता है। यदि "fruit" का मान "banana" होता, तो दूसरा पैटर्न मेल खाता और "This is a yellow fruit." को इको करने वाला कोड ब्लॉक निष्पादित होता, और इसी तरह। यदि "fruit" का मान किसी भी निर्दिष्ट पैटर्न से मेल नहीं खाता, तो डिफ़ॉल्ट केस निष्पादित होता, जो "Unknown fruit." को इको करता है।
cron का उपयोग करके स्क्रिप्ट कैसे शेड्यूल करें
Cron यूनिक्स-जैसे ऑपरेटिंग सिस्टम में उपलब्ध जॉब शेड्यूलिंग के लिए एक शक्तिशाली उपयोगिता है। Cron को कॉन्फिगर करके, आप दैनिक, साप्ताहिक, मासिक, या विशिष्ट समय के आधार पर चलने वाले स्वचालित जॉब सेट कर सकते हैं। Cron द्वारा प्रदान की जाने वाली स्वचालन क्षमताएं लिनक्स सिस्टम एडमिनिस्ट्रेशन में महत्वपूर्ण भूमिका निभाती हैं।
नीचे cron शेड्यूल करने का सिंटैक्स है:
# Cron job example * * * * * sh /path/to/script.sh
यहां, * क्रमशः मिनट, घंटे, दिन, महीना, सप्ताह के दिन को दर्शाते हैं।
नीचे cron जॉब शेड्यूल करने के कुछ उदाहरण दिए गए हैं।
0 0 * * * हर दिन मध्यरात्रि में स्क्रिप्ट चलाएं 0 0 * * * /path/to/script.sh
*/5 * * * * हर 5 मिनट में स्क्रिप्ट चलाएं */5 * * * * /path/to/script.sh
0 6 * * 1-5 सोमवार से शुक्रवार सुबह 6 बजे स्क्रिप्ट चलाएं 0 6 * * 1-5 /path/to/script.sh
0 0 1-7 * * हर महीने के पहले 7 दिनों में स्क्रिप्ट चलाएं 0 0 1-7 * * /path/to/script.sh
0 12 1 * * हर महीने के पहले दिन दोपहर 12 बजे स्क्रिप्ट चलाएं 0 12 1 * * /path/to/script.sh
crontab का उपयोग करना
crontab उपयोगिता का उपयोग cron जॉब को जोड़ने और संपादित करने के लिए किया जाता है।
crontab -l किसी विशेष उपयोगकर्ता के लिए पहले से शेड्यूल की गई स्क्रिप्ट को सूचीबद्ध करता है।
आप crontab -e के माध्यम से cron जोड़ और संपादित कर सकते हैं।
आप corn जॉब के बारे में मेरे अन्य लेख में यहां और पढ़ सकते हैं।
बैश स्क्रिप्ट को डीबग और समस्या निवारण कैसे करें
किसी भी बैश स्क्रिप्टर के लिए डिबगिंग और समस्या निवारण आवश्यक कौशल हैं। जबकि बैश स्क्रिप्ट अविश्वसनीय रूप से शक्तिशाली हो सकती हैं, वे त्रुटियों और अप्रत्याशित व्यवहार की संभावना भी रखती हैं। इस खंड में, हम बैश स्क्रिप्ट को डीबग और समस्या निवारण के लिए कुछ टिप्स और तकनीकों पर चर्चा करेंगे।
set -x विकल्प सेट करें
बैश स्क्रिप्ट को डीबग करने के लिए सबसे उपयोगी तकनीकों में से एक है स्क्रिप्ट की शुरुआत में set -x विकल्प सेट करना। यह विकल्प डिबगिंग मोड को सक्षम करता है, जो बैश को उसके द्वारा निष्पादित प्रत्येक कमांड को + साइन से पहले टर्मिनल पर प्रिंट करने का कारण बनता है। यह आपके स्क्रिप्ट में त्रुटियों के स्थान की पहचान करने में अविश्वसनीय रूप से सहायक हो सकता है।
#!/bin/bash set -x # आपका स्क्रिप्ट यहां जाता है
एग्जिट कोड जांचें
जब बैश को त्रुटि का सामना करना पड़ता है, तो यह एक एग्जिट कोड सेट करता है जो त्रुटि की प्रकृति को इंगित करता है। आप $? वेरिएबल का उपयोग करके सबसे हालिया कमांड के एग्जिट कोड की जांच कर सकते हैं। 0 का मान सफलता को इंगित करता है, जबकि कोई अन्य मान त्रुटि को इंगित करता है।
#!/bin/bash # आपका स्क्रिप्ट यहां जाता है if [ $? -ne 0 ]; then echo "Error occurred." fi
echo स्टेटमेंट का उपयोग करें
बैश स्क्रिप्ट को डीबग करने के लिए एक और उपयोगी तकनीक है अपने कोड में echo स्टेटमेंट डालना। यह पहचानने में मदद कर सकता है कि त्रुटियां कहां हो रही हैं और वेरिएबल को कौन से मान पास किए जा रहे हैं।
#!/bin/bash # आपका स्क्रिप्ट यहां जाता है echo "Value of variable x is: $x" # अधिक कोड यहां जाता है
set -e विकल्प का उपयोग करें
यदि आप चाहते हैं कि आपका स्क्रिप्ट तुरंत समाप्त हो जाए जब स्क्रिप्ट में कोई भी कमांड विफल हो, तो आप set -e विकल्प का उपयोग कर सकते हैं। यह विकल्प बैश को त्रुटि के साथ समाप्त करने का कारण बनेगा यदि स्क्रिप्ट में कोई भी कमांड विफल होता है, जिससे आपके स्क्रिप्ट में त्रुटियों की पहचान करना और उन्हें ठीक करना आसान हो जाता है।
#!/bin/bash set -e # आपका स्क्रिप्ट यहां जाता है
लॉग सत्यापित करके cron का समस्या निवारण
हम लॉग फ़ाइलों का उपयोग करके cron का समस्या निवारण कर सकते हैं। सभी शेड्यूल्ड जॉब के लिए लॉग बनाए रखे जाते हैं। आप लॉग में जांच और सत्यापित कर सकते हैं कि कोई विशिष्ट जॉब इरादे के अनुसार चला या नहीं।
Ubuntu/Debian के लिए, आप cron लॉग यहां पा सकते हैं:
/var/log/syslog
अन्य वितरणों के लिए स्थान भिन्न होता है।
एक cron जॉब लॉग फ़ाइल ऐसा दिख सकती है:
2022-03-11 00:00:01 Task started 2022-03-11 00:00:02 Running script /path/to/script.sh 2022-03-11 00:00:03 Script completed successfully 2022-03-11 00:05:01 Task started 2022-03-11 00:05:02 Running script /path/to/script.sh 2022-03-11 00:05:03 Error: unable to connect to database 2022-03-11 00:05:03 Script exited with error code 1 2022-03-11 00:10:01 Task started 2022-03-11 00:10:02 Running script /path/to/script.sh 2022-03-11 00:10:03 Script completed successfully
निष्कर्ष
इस लेख में, हमने टर्मिनल तक कैसे पहुंचे और फिर कुछ बुनियादी बैश कमांड चलाए। हमने यह भी अध्ययन किया कि बैश शेल क्या है। हमने लूप और शर्ती का उपयोग करके कोड को ब्रांच करने पर संक्षेप में चर्चा की। अंत में, हमने cron का उपयोग करके स्क्रिप्ट को स्वचालित करने और कुछ समस्या निवारण तकनीकों पर चर्चा की।
बैश स्क्रिप्टिंग के बारे में अधिक जानने के लिए संसाधन
यदि आप बैश स्क्रिप्टिंग की दुनिया में गहराई से जाना चाहते हैं, तो मैं सुझाव दूंगा कि आप freeCodeCamp पर लिनक्स पर इस 6-घंटे के कोर्स को देखें।
इस ट्यूटोरियल से आपकी पसंदीदा चीज़ क्या थी? आप इनमें से किसी भी प्लेटफॉर्म पर मुझसे जुड़ सकते हैं। 📧
अगले ट्यूटोरियल में मिलते हैं, हैप्पी कोडिंग 😁
बैनर इमेज क्रेडिट: Freepik द्वारा छवि
मुफ्त में कोड करना सीखें। freeCodeCamp के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर के रूप में नौकरी पाने में मदद की है। शुरू करें