शेल स्क्रिप्टिंग Linux में प्रक्रिया स्वचालन का एक महत्वपूर्ण हिस्सा है। स्क्रिप्टिंग आपको कमांड के एक क्रम को एक फ़ाइल में लिखने और फिर उन्हें निष्पादित करने में मदद करता है।
यह आपका समय बचाता है क्योंकि आपको कुछ कमांड को बार-बार लिखने की आवश्यकता नहीं होती है। आप दैनिक कार्यों को कुशलतापूर्वक कर सकते हैं और यहां तक कि उन्हें स्वचालित निष्पादन के लिए शेड्यूल भी कर सकते हैं।
आप कुछ स्क्रिप्ट को स्टार्टअप पर निष्पादित करने के लिए भी सेट कर सकते हैं जैसे नया सत्र लॉन्च करने पर एक विशेष संदेश दिखाना या कुछ पर्यावरण चर सेट करना।
स्क्रिप्टिंग के अनुप्रयोग और उपयोग कई हैं, तो आइए गोता लगाएं।
इस लेख में, आप सीखेंगे:
- Bash शेल क्या है?
- Bash स्क्रिप्ट क्या है और आप इसे कैसे पहचानते हैं?
- अपनी पहली Bash स्क्रिप्ट कैसे बनाएं और निष्पादित करें।
- शेल स्क्रिप्टिंग का मूल सिंटैक्स।
- सिस्टम की शेड्यूल्ड स्क्रिप्ट कैसे देखें।
- Cron Jobs के माध्यम से शेड्यूलिंग करके स्क्रिप्ट को स्वचालित कैसे करें।
सीखने का सबसे अच्छा तरीका अभ्यास करना है। मैं आपको Replit का उपयोग करके साथ चलने के लिए अत्यधिक प्रोत्साहित करता हूं। आप मिनटों में एक चलता हुआ Linux शेल एक्सेस कर सकते हैं।
Bash Shell का परिचय
Linux कमांड लाइन एक प्रोग्राम द्वारा प्रदान की जाती है जिसे शेल कहा जाता है। वर्षों से, शेल प्रोग्राम विभिन्न विकल्पों को पूरा करने के लिए विकसित हुआ है।
विभिन्न उपयोगकर्ताओं को अलग-अलग शेल का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है। लेकिन अधिकांश उपयोगकर्ता वर्तमान डिफ़ॉल्ट शेल के साथ रहना पसंद करते हैं। कई Linux डिस्ट्रो के लिए डिफ़ॉल्ट शेल GNU Bourne-Again Shell (bash) है। Bash, Bourne shell (sh) द्वारा सफल हुआ है।
जब आप पहली बार शेल लॉन्च करते हैं, तो यह .bashrc या .bash_profile फ़ाइल में स्थित एक स्टार्टअप स्क्रिप्ट का उपयोग करता है जो आपको शेल के व्यवहार को अनुकूलित करने की अनुमति देता है।
जब शेल का उपयोग इंटरैक्टिव रूप से किया जाता है, तो यह उपयोगकर्ता से कमांड की प्रतीक्षा करते समय $ प्रदर्शित करता है। इसे शेल प्रॉम्प्ट कहा जाता है।
[username@host ~]$
यदि शेल रूट के रूप में चल रहा है, तो प्रॉम्प्ट # में बदल जाता है। सुपरयूज़र शेल प्रॉम्प्ट इस तरह दिखता है:
[root@host ~]#
Bash बहुत शक्तिशाली है क्योंकि यह कुछ ऑपरेशन को सरल बना सकता है जिन्हें GUI के साथ कुशलतापूर्वक पूरा करना मुश्किल है। याद रखें कि अधिकांश सर्वरों में GUI नहीं होता है, और कमांड लाइन इंटरफेस (CLI) की शक्तियों का उपयोग करना सीखना सबसे अच्छा है।
Bash स्क्रिप्ट क्या है?
एक Bash स्क्रिप्ट एक फ़ाइल में लिखे गए कमांड की एक श्रृंखला है। इन्हें Bash प्रोग्राम द्वारा पढ़ा और निष्पादित किया जाता है। प्रोग्राम लाइन दर लाइन निष्पादित करता है।
उदाहरण के लिए, आप एक निश्चित पथ पर नेविगेट कर सकते हैं, एक फ़ोल्डर बना सकते हैं और कमांड लाइन का उपयोग करके उसके अंदर एक प्रक्रिया उत्पन्न कर सकते हैं।
आप कमांड को एक Bash स्क्रिप्ट में सहेजकर और इसे चलाकर उसी क्रम के चरणों को कर सकते हैं। आप स्क्रिप्ट को कितनी भी बार चला सकते हैं।
Bash स्क्रिप्ट की पहचान कैसे करें?
फ़ाइल एक्सटेंशन .sh।
नामकरण परंपराओं के अनुसार, Bash स्क्रिप्ट .sh से समाप्त होती हैं। हालांकि, Bash स्क्रिप्ट sh एक्सटेंशन के बिना भी पूरी तरह से ठीक चल सकती हैं।
स्क्रिप्ट एक Bash Bang से शुरू होती हैं।
स्क्रिप्ट की पहचान एक shebang के साथ भी की जाती है। Shebang bash # और bang ! का संयोजन है, जिसके बाद bash शेल का पथ होता है। यह स्क्रिप्ट की पहली पंक्ति है। Shebang शेल को इसे bash शेल के माध्यम से निष्पादित करने के लिए कहता है। Shebang बस Bash इंटरप्रेटर का एक निरपेक्ष पथ है।
नीचे Shebang स्टेटमेंट का एक उदाहरण है।
#! /bin/bash
Bash प्रोग्राम का पथ भिन्न हो सकता है। हम बाद में देखेंगे कि इसे कैसे पहचाना जाए।
निष्पादन अधिकार
स्क्रिप्ट में उन्हें निष्पादित करने वाले उपयोगकर्ता के लिए निष्पादन अधिकार होते हैं।
एक निष्पादन अधिकार x द्वारा दर्शाया जाता है। नीचे दिए गए उदाहरण में, मेरे उपयोगकर्ता के पास फ़ाइल test_script.sh के लिए rwx (पढ़ें, लिखें, निष्पादित करें) अधिकार हैं
फ़ाइल रंग
निष्पादन योग्य स्क्रिप्ट बाकी फ़ाइलों और फ़ोल्डरों से अलग रंग में दिखाई देती हैं।
मेरे मामले में, निष्पादन अधिकारों वाली स्क्रिप्ट हरे रंग में दिखाई देती हैं।
अपनी पहली Bash स्क्रिप्ट कैसे बनाएं
आइए एक सरल Bash स्क्रिप्ट बनाएं जो Hello World आउटपुट करती है।
hello_world.sh नाम की एक फ़ाइल बनाएं
touch hello_world.sh
अपने Bash शेल का पथ खोजें।
which bash
मेरे मामले में, पथ /usr/bin/bash है और मैं इसे Shebang में शामिल करूंगा।
कमांड लिखें।
हम कंसोल पर "Hello World" echo करेंगे।
हमारी स्क्रिप्ट कुछ इस तरह दिखेगी:
#! usr/bin/bash echo "Hello World"
अपनी पसंद के टेक्स्ट एडिटर का उपयोग करके फ़ाइल hello_world.sh को संपादित करें और उपरोक्त पंक्तियों को इसमें जोड़ें।
अपने उपयोगकर्ता को निष्पादन अधिकार प्रदान करें।
नीचे दिए गए कमांड का उपयोग करके फ़ाइल अनुमतियों को संशोधित करें और स्क्रिप्ट के निष्पादन की अनुमति दें:
chmod u+x hello_world.sh
chmod किसी विशेष उपयोगकर्ता के लिए फ़ाइल के मौजूदा अधिकारों को संशोधित करता है। हम उपयोगकर्ता u में +x जोड़ रहे हैं।
स्क्रिप्ट चलाएं।
आप निम्न तरीकों से स्क्रिप्ट चला सकते हैं:
./hello_world.sh
bash hello_world.sh।
यहां आउटपुट है:
Bash स्क्रिप्टिंग का मूल सिंटैक्स
किसी अन्य प्रोग्रामिंग भाषा की तरह, Bash स्क्रिप्टिंग कंप्यूटर द्वारा समझने योग्य प्रोग्राम बनाने के लिए नियमों के एक सेट का पालन करती है। इस खंड में, हम Bash स्क्रिप्टिंग के सिंटैक्स का अध्ययन करेंगे।
वेरिएबल कैसे परिभाषित करें
हम variable_name=value सिंटैक्स का उपयोग करके एक वेरिएबल परिभाषित कर सकते हैं। वेरिएबल का मान प्राप्त करने के लिए, वेरिएबल से पहले $ जोड़ें।
#!/bin/bash # एक सरल वेरिएबल उदाहरण greeting=Hello name=Tux echo $greeting $name
Tux Linux शुभंकर, पेंगुइन का नाम भी है।
अंकगणितीय अभिव्यक्तियाँ
नीचे Bash द्वारा गणितीय गणनाओं के लिए समर्थित ऑपरेटर हैं:
| ऑपरेटर | उपयोग |
|---|---|
| + | जोड़ |
| - | घटाव |
| * | गुणा |
| / | भाग |
| ** | घातांक |
| % | मॉड्यूलस |
आइए कुछ उदाहरण चलाएं।
संख्यात्मक अभिव्यक्तियों की गणना भी की जा सकती है और नीचे दिए गए सिंटैक्स का उपयोग करके एक वेरिएबल में संग्रहीत की जा सकती है:
var=$((expression))
आइए एक उदाहरण आज़माएं।
#!/bin/bash var=$((3+9)) echo $var
उपरोक्त विधियों का उपयोग करके भिन्नों की सही गणना नहीं की जाती है और काट दिया जाता है।
दशमलव गणना के लिए, हम आउटपुट को दशमलव स्थानों की एक विशेष संख्या तक प्राप्त करने के लिए bc कमांड का उपयोग कर सकते हैं। bc (Bash Calculator) एक कमांड लाइन कैलकुलेटर है जो एक निश्चित संख्या में दशमलव बिंदुओं तक गणना का समर्थन करता है।
echo "scale=2;22/7" | bc
जहां scale आउटपुट में आवश्यक दशमलव स्थानों की संख्या को परिभाषित करता है।
उपयोगकर्ता इनपुट कैसे पढ़ें
कभी-कभी आपको उपयोगकर्ता इनपुट एकत्र करने और प्रासंगिक संचालन करने की आवश्यकता होगी।
Bash में, हम read कमांड का उपयोग करके उपयोगकर्ता इनपुट ले सकते हैं।
read variable_name
उपयोगकर्ता को एक कस्टम संदेश के साथ संकेत देने के लिए, -p फ्लैग का उपयोग करें।
read -p "Enter your age" variable_name
उदाहरण:
#!/bin/bash echo "Enter a numner" read a echo "Enter a numner" read b var=$((a+b)) echo $var
संख्यात्मक तुलना तार्किक ऑपरेटर
तुलना का उपयोग यह जांचने के लिए किया जाता है कि क्या कथन true या false का मूल्यांकन करते हैं। हम दो कथनों की तुलना करने के लिए नीचे दिखाए गए ऑपरेटरों का उपयोग कर सकते हैं:
| ऑपरेशन | सिंटैक्स | व्याख्या |
|---|---|---|
| समानता | num1 -eq num2 | क्या num1, num2 के बराबर है |
| अधिक या बराबर | num1 -ge num2 | क्या num1, num2 से अधिक या बराबर है |
| अधिक | num1 -gt num2 | क्या num1, num2 से अधिक है |
| कम या बराबर | num1 -le num2 | क्या num1, num2 से कम या बराबर है |
| कम | num1 -lt num2 | क्या num1, num2 से कम है |
| बराबर नहीं | num1 -ne num2 | क्या num1, num2 के बराबर नहीं है |
सिंटैक्स:
if [ conditions ] then commands fi
उदाहरण:
आइए दो संख्याओं की तुलना करें और उनका संबंध खोजें:
read x read y if [ $x -gt $y ] then echo X is greater than Y elif [ $x -lt $y ] then echo X is less than Y elif [ $x -eq $y ] then echo X is equal to Y fi
आउटपुट:
सशर्त कथन (निर्णय लेना)
शर्तें अभिव्यक्तियां हैं जो बूलियन अभिव्यक्ति (true या false) का मूल्यांकन करती हैं। शर्तों की जांच के लिए, हम if, if-else, if-elif-else और नेस्टेड कंडीशनल का उपयोग कर सकते हैं।
सशर्त कथनों की संरचना इस प्रकार है:
if...then...fiकथनif...then...else...fiकथनif..elif..else..fiif..then..else..if..then..fi..fi..(नेस्टेड कंडीशनल)
सिंटैक्स:
if [[ condition ]] then statement elif [[ condition ]]; then statement else do this by default fi
सार्थक तुलना बनाने के लिए, हम AND -a और OR -o का भी उपयोग कर सकते हैं।
नीचे दिया गया कथन इसका अनुवाद करता है: यदि a 40 से अधिक है और b 6 से कम है।
if [ $a -gt 40 -a $b -lt 6 ]
उदाहरण: आइए इसकी भुजाओं की लंबाई पढ़कर त्रिकोण का प्रकार खोजें।
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
आउटपुट:
टेस्ट केस #1
टेस्ट केस #2
टेस्ट केस #3
लूपिंग और स्किपिंग
For लूप आपको कथनों को एक विशिष्ट संख्या में निष्पादित करने की अनुमति देते हैं।
संख्याओं के साथ लूपिंग:
नीचे दिए गए उदाहरण में, लूप 5 बार पुनरावृत्त होगा।
#!/bin/bash for i in {1..5} do echo $i done
स्ट्रिंग्स के साथ लूपिंग:
हम स्ट्रिंग्स के माध्यम से भी लूप कर सकते हैं।
#!/bin/bash for X in cyan magenta yellow do echo $X done
While लूप
While लूप एक शर्त की जांच करते हैं और तब तक लूप करते हैं जब तक शर्त true रहती है। हमें एक काउंटर स्टेटमेंट प्रदान करने की आवश्यकता है जो लूप निष्पादन को नियंत्रित करने के लिए काउंटर को बढ़ाता है।
नीचे दिए गए उदाहरण में, (( i += 1 )) काउंटर स्टेटमेंट है जो i के मान को बढ़ाता है।
उदाहरण:
#!/bin/bash i=1 while [[ $i -le 10 ]] ; do echo "$i" (( i += 1 )) done
फ़ाइलें पढ़ना
मान लीजिए हमारे पास नीचे दिखाए अनुसार sample_file.txt फ़ाइल है:
हम फ़ाइल को लाइन दर लाइन पढ़ सकते हैं और आउटपुट को स्क्रीन पर प्रिंट कर सकते हैं।
#!/bin/bash LINE=1 while read -r CURRENT_LINE do echo "$LINE: $CURRENT_LINE" ((LINE++)) done < "sample_file.txt"
आउटपुट:
बैक टिक्स के साथ कमांड कैसे निष्पादित करें
यदि आपको अपने स्क्रिप्ट में एक जटिल कमांड के आउटपुट को शामिल करने की आवश्यकता है, तो आप स्टेटमेंट को बैक टिक्स के अंदर लिख सकते हैं।
सिंटैक्स:
var= ` commands `
उदाहरण: मान लीजिए हम tmpfs उनके नाम में वाले माउंटपॉइंट की सूची का आउटपुट प्राप्त करना चाहते हैं। हम df -h | grep tmpfs जैसा स्टेटमेंट बना सकते हैं।
इसे Bash स्क्रिप्ट में शामिल करने के लिए, हम इसे बैक टिक्स में संलग्न कर सकते हैं।
#!/bin/bash var=`df -h | grep tmpfs` echo $var
आउटपुट:
कमांड लाइन से स्क्रिप्ट के लिए आर्गुमेंट कैसे प्राप्त करें
निष्पादन पर स्क्रिप्ट को आर्गुमेंट देना संभव है।
$@ पैरामीटर की स्थिति को दर्शाता है, एक से शुरू होकर।
#!/bin/bash for x in $@ do echo "Entered arg is $x" done
इसे इस तरह चलाएं:
./script arg1 arg2
Cron Jobs के माध्यम से शेड्यूलिंग करके स्क्रिप्ट को स्वचालित कैसे करें
Cron यूनिक्स जैसे सिस्टम में मौजूद एक जॉब शेड्यूलिंग उपयोगिता है। आप जॉब को दैनिक, साप्ताहिक, मासिक या दिन के एक विशिष्ट समय पर निष्पादित करने के लिए शेड्यूल कर सकते हैं। Linux में स्वचालन भारी रूप से Cron Jobs पर निर्भर करता है।
नीचे Cron शेड्यूल करने का सिंटैक्स है:
# Cron job example * * * * * sh /path/to/script.sh
यहां, * क्रमशः मिनट, घंटे, दिन, महीना, सप्ताह के दिन का प्रतिनिधित्व करता है।
नीचे Cron Jobs शेड्यूल करने के कुछ उदाहरण हैं।
| शेड्यूल | शेड्यूल्ड वैल्यू |
|---|---|
| 5 0 * 8 * | अगस्त में 00:05 पर। |
| 5 4 * * 6 | रविवार को 04:05 पर। |
| 0 22 * * 1-5 | सोमवार से शुक्रवार तक हर दिन 22:00 पर। |
आप इस ब्लॉग पोस्ट में Cron के बारे में विस्तार से जान सकते हैं।
सिस्टम में मौजूदा स्क्रिप्ट की जांच कैसे करें
Crontab का उपयोग करना
crontab -l किसी विशेष उपयोगकर्ता के लिए पहले से शेड्यूल्ड स्क्रिप्ट को सूचीबद्ध करता है।
Find कमांड का उपयोग करना
find कमांड कुछ पैटर्न के आधार पर फ़ाइलों का पता लगाने में मदद करता है। चूंकि अधिकांश स्क्रिप्ट .sh से समाप्त होती हैं, हम Find स्क्रिप्ट का उपयोग इस तरह कर सकते हैं:
find . -type f -name "*.sh"
जहां,
.वर्तमान डायरेक्टरी को दर्शाता है। आप तदनुसार पथ बदल सकते हैं।-type fइंगित करता है कि हम जिस फ़ाइल प्रकार की तलाश कर रहे हैं वह एक टेक्स्ट-आधारित फ़ाइल है।*.sh.shसे समाप्त होने वाली सभी फ़ाइलों से मेल खाने के लिए कहता है।
यदि आप Find कमांड के बारे में विस्तार से पढ़ने में रुचि रखते हैं, तो मेरा अन्य पोस्ट देखें।
समापन
इस ट्यूटोरियल में हमने शेल स्क्रिप्टिंग की मूल बातें सीखीं। हमने उदाहरणों और सिंटैक्स को देखा जो हमें सार्थक प्रोग्राम लिखने में मदद कर सकते हैं।
इस ट्यूटोरियल से आपकी पसंदीदा चीज़ क्या सीखी? मुझे ट्विटर पर बताएं!
आप मेरे अन्य पोस्ट यहां पढ़ सकते हैं।
वर्क वेक्टर macrovector द्वारा बनाया गया - www.freepik.com