शेल स्क्रिप्टिंग लिनक्स में प्रोसेस ऑटोमेशन का एक महत्वपूर्ण हिस्सा है। स्क्रिप्टिंग आपको किसी फ़ाइल में आदेशों का एक क्रम लिखने और फिर उन्हें निष्पादित करने में मदद करती है।
यह आपका समय बचाता है क्योंकि आपको बार-बार कुछ कमांड लिखने की आवश्यकता नहीं होती है। आप दैनिक कार्यों को कुशलतापूर्वक कर सकते हैं और उन्हें स्वचालित निष्पादन के लिए शेड्यूल भी कर सकते हैं।
आप स्टार्टअप पर निष्पादित करने के लिए कुछ स्क्रिप्ट भी सेट कर सकते हैं जैसे कि एक नया सत्र शुरू करने पर एक विशेष संदेश दिखाना या कुछ पर्यावरण चर सेट करना।
स्क्रिप्टिंग के अनुप्रयोग और उपयोग असंख्य हैं, तो आइए जानते हैं।
इस लेख में, आप सीखेंगे:
- बैश शेल क्या है?
- बैश स्क्रिप्ट क्या है और आप इसे कैसे पहचानते हैं?
- अपनी पहली बैश स्क्रिप्ट कैसे बनाएं और इसे कैसे निष्पादित करें।
- शेल स्क्रिप्टिंग का मूल सिंटैक्स।
- सिस्टम की शेड्यूल्ड स्क्रिप्ट कैसे देखें।
- क्रॉन जॉब्स के माध्यम से शेड्यूल करके स्क्रिप्ट को स्वचालित कैसे करें।
सीखने का सबसे अच्छा तरीका अभ्यास करना है। मैं आपको रिप्लिट का उपयोग करने के साथ-साथ अनुसरण करने के लिए अत्यधिक प्रोत्साहित करता हूं। आप चल रहे Linux शेल को मिनटों में एक्सेस कर सकते हैं.
बैश शेल का परिचय
लिनक्स कमांड लाइन शेल नामक प्रोग्राम द्वारा प्रदान की जाती है। इन वर्षों में, विभिन्न विकल्पों को पूरा करने के लिए शेल कार्यक्रम विकसित हुआ है।
विभिन्न शेल का उपयोग करने के लिए विभिन्न उपयोगकर्ताओं को कॉन्फ़िगर किया जा सकता है। लेकिन अधिकांश उपयोगकर्ता वर्तमान डिफ़ॉल्ट शेल के साथ रहना पसंद करते हैं। कई लिनक्स डिस्ट्रो के लिए डिफ़ॉल्ट शेल जीएनयू बॉर्न-अगेन शेल (बैश) है। बैश के बाद बॉर्न शेल (sh
)।
जब आप पहली बार शेल लॉन्च करते हैं, तो यह .bashrc
. में स्थित स्टार्टअप स्क्रिप्ट का उपयोग करता है या .bash_profile
फ़ाइल जो आपको शेल के व्यवहार को अनुकूलित करने की अनुमति देती है।
जब एक शेल को अंतःक्रियात्मक रूप से उपयोग किया जाता है, तो यह एक $
प्रदर्शित करता है जब यह उपयोगकर्ता से आदेश की प्रतीक्षा कर रहा है। इसे शेल प्रांप्ट कहा जाता है।
[username@host ~]$
यदि शेल रूट के रूप में चल रहा है, तो प्रॉम्प्ट को #
. में बदल दिया जाता है . सुपरयुसर शेल प्रॉम्प्ट इस तरह दिखता है:
[root@host ~]#
बैश बहुत शक्तिशाली है क्योंकि यह कुछ ऐसे कार्यों को सरल बना सकता है जिन्हें जीयूआई के साथ कुशलतापूर्वक पूरा करना मुश्किल है। याद रखें कि अधिकांश सर्वरों में GUI नहीं होता है, और कमांड लाइन इंटरफ़ेस (CLI) की शक्तियों का उपयोग करना सीखना सबसे अच्छा है।
बैश स्क्रिप्ट क्या है?
एक बैश स्क्रिप्ट एक फ़ाइल में लिखे गए आदेशों की एक श्रृंखला है। इन्हें बैश प्रोग्राम द्वारा पढ़ा और निष्पादित किया जाता है। कार्यक्रम लाइन से लाइन निष्पादित करता है।
उदाहरण के लिए, आप एक निश्चित पथ पर नेविगेट कर सकते हैं, एक फ़ोल्डर बना सकते हैं और कमांड लाइन का उपयोग करके उसके अंदर एक प्रक्रिया शुरू कर सकते हैं।
आप बैश स्क्रिप्ट में कमांड को सेव करके और इसे चलाकर चरणों का समान क्रम कर सकते हैं। आप स्क्रिप्ट को कितनी भी बार चला सकते हैं।
आप बैश स्क्रिप्ट की पहचान कैसे करते हैं?
.sh
का फ़ाइल एक्सटेंशन ।
परम्पराओं के नामकरण से, बैश स्क्रिप्ट एक .sh
. के साथ समाप्त होती है . हालांकि, बैश स्क्रिप्ट sh
. के बिना पूरी तरह से ठीक चल सकती हैं विस्तार।
स्क्रिप्ट एक बैश बैंग से शुरू होती है।
लिपियों की पहचान shebang
. से भी की जाती है . शेबांग bash #
. का एक संयोजन है और bang !
बैश शेल पथ का अनुसरण किया। यह लिपि की पहली पंक्ति है। शेबांग शेल को बैश शेल के माध्यम से निष्पादित करने के लिए कहता है। शेबांग बैश दुभाषिया के लिए एक पूर्ण मार्ग है।
नीचे शेबांग कथन का एक उदाहरण दिया गया है।
#! /bin/bash
बैश प्रोग्राम का पथ भिन्न हो सकता है। हम बाद में देखेंगे कि इसे कैसे पहचाना जाए।
निष्पादन अधिकार
स्क्रिप्ट को निष्पादित करने वाले उपयोगकर्ता के लिए निष्पादन अधिकार हैं।
एक निष्पादन अधिकार x
. द्वारा दर्शाया जाता है . नीचे दिए गए उदाहरण में, मेरे उपयोगकर्ता के पास rwx
है फ़ाइल के अधिकार (पढ़ें, लिखें, निष्पादित करें) test_script.sh
फ़ाइल का रंग
निष्पादन योग्य स्क्रिप्ट बाकी फ़ाइलों और फ़ोल्डरों से भिन्न रंग में दिखाई देती हैं।
मेरे मामले में, निष्पादन अधिकार वाली स्क्रिप्ट हरे रंग की दिखाई देती हैं।
अपनी पहली बैश स्क्रिप्ट कैसे बनाएं
आइए बैश में एक साधारण स्क्रिप्ट बनाएं जो Hello World
. को आउटपुट करे ।
hello_world.sh नाम की एक फाइल बनाएं
touch hello_world.sh
अपने बैश शेल का पथ खोजें।
which bash
मेरे मामले में, पथ है /usr/bin/bash
और मैं इसे शेबैंग में शामिल करूंगा।
आदेश लिखें।
हम echo
करेंगे कंसोल के लिए "हैलो वर्ल्ड"।
हमारी स्क्रिप्ट कुछ इस तरह दिखेगी:
#! usr/bin/bash
echo "Hello World"
फ़ाइल को संपादित करें hello_world.sh
अपनी पसंद के टेक्स्ट एडिटर का उपयोग करके उसमें उपरोक्त पंक्तियां जोड़ें।
अपने उपयोगकर्ता को निष्पादन अधिकार प्रदान करें।
फ़ाइल अनुमतियों को संशोधित करें और नीचे दिए गए आदेश का उपयोग करके स्क्रिप्ट के निष्पादन की अनुमति दें:
chmod u+x hello_world.sh
chmod
किसी विशेष उपयोगकर्ता के लिए फ़ाइल के मौजूदा अधिकारों को संशोधित करता है। हम +x
जोड़ रहे हैं उपयोगकर्ता के लिए u
।
स्क्रिप्ट चलाएँ।
आप स्क्रिप्ट को निम्न तरीकों से चला सकते हैं:
./hello_world.sh
bash hello_world.sh
।
यह रहा आउटपुट:
बैश स्क्रिप्टिंग का मूल सिंटैक्स
किसी भी अन्य प्रोग्रामिंग भाषा की तरह, बैश स्क्रिप्टिंग कंप्यूटर द्वारा समझने योग्य प्रोग्राम बनाने के लिए नियमों के एक सेट का पालन करती है। इस खंड में, हम बैश स्क्रिप्टिंग के सिंटैक्स का अध्ययन करेंगे।
चरों को कैसे परिभाषित करें
हम सिंटैक्स variable_name=value
. का उपयोग करके एक वेरिएबल को परिभाषित कर सकते हैं . वेरिएबल का मान प्राप्त करने के लिए, $
add जोड़ें चर से पहले।
#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name
टक्स, लिनक्स शुभंकर, पेंगुइन का भी नाम है।
अंकगणित व्यंजक
गणितीय गणना के लिए बैश द्वारा समर्थित ऑपरेटर नीचे दिए गए हैं:
ऑपरेटर | उपयोग |
---|---|
+ | जोड़ |
- | घटाव |
* | गुणा |
/ | डिवीजन |
** | घातांक |
% | मापांक |
आइए कुछ उदाहरण चलाते हैं।
नीचे दिए गए सिंटैक्स का उपयोग करके संख्यात्मक अभिव्यक्तियों की गणना और एक चर में संग्रहीत किया जा सकता है:
var=$((expression))
आइए एक उदाहरण देखें।
#!/bin/bash
var=$((3+9))
echo $var
उपरोक्त विधियों का उपयोग करके भिन्नों की सही गणना नहीं की जाती है और उन्हें काट दिया जाता है।
दशमलव गणना . के लिए , हम bc
. का उपयोग कर सकते हैं दशमलव स्थानों की एक विशेष संख्या में आउटपुट प्राप्त करने के लिए कमांड। bc
(बैश कैलकुलेटर) एक कमांड लाइन कैलकुलेटर है जो दशमलव बिंदुओं की एक निश्चित संख्या तक गणना का समर्थन करता है।
echo "scale=2;22/7" | bc
जहां scale
आउटपुट में आवश्यक दशमलव स्थानों की संख्या को परिभाषित करता है।
उपयोगकर्ता इनपुट कैसे पढ़ें
कभी-कभी आपको उपयोगकर्ता इनपुट एकत्र करने और प्रासंगिक संचालन करने की आवश्यकता होगी।
बैश में, हम 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 | num2 से num1 बड़ा है |
बराबर से कम | num1 -le num2 | num1, num2 के बराबर से कम है |
इससे कम | num1 -lt num2 | num1 num2 से कम है |
बराबर नहीं | num1 -ne num2 | संख्या1 है जो 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..fi
if..then..else..if..then..fi..fi..
(नेस्टेड कंडीशनल)
वाक्यविन्यास :
if [[ condition ]]
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
सार्थक तुलना करने के लिए, हम AND -a
. का उपयोग कर सकते हैं और या -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
लूपिंग और स्किपिंग
लूप के लिए आप एक विशिष्ट संख्या में बार-बार स्टेटमेंट निष्पादित कर सकते हैं।
संख्याओं के साथ लूपिंग:
नीचे दिए गए उदाहरण में, लूप 5 बार पुनरावृति करेगा।
#!/bin/bash
for i in {1..5}
do
echo $i
done
स्ट्रिंग्स के साथ लूपिंग:
हम स्ट्रिंग्स के माध्यम से भी लूप कर सकते हैं।
#!/bin/bash
for X in cyan magenta yellow
do
echo $X
done
लूप के दौरान
जबकि लूप कंडीशन की जांच करते हैं और तब तक लूप करते हैं जब तक कि कंडीशन 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
।
इसे बैश स्क्रिप्ट में शामिल करने के लिए, हम इसे बैक टिक में संलग्न कर सकते हैं।
#!/bin/bash
var=`df -h | grep tmpfs`
echo $var
आउटपुट:
कमांड लाइन से स्क्रिप्ट के लिए तर्क कैसे प्राप्त करें
निष्पादन पर स्क्रिप्ट को तर्क देना संभव है।
$@
एक से शुरू होने वाले मापदंडों की स्थिति का प्रतिनिधित्व करता है।
#!/bin/bash
for x in $@
do
echo "Entered arg is $x"
done
इसे इस तरह चलाएं:
./script arg1 arg2
क्रॉन जॉब्स द्वारा शेड्यूलिंग द्वारा स्क्रिप्ट को स्वचालित कैसे करें
क्रोन एक जॉब शेड्यूलिंग यूटिलिटी है जो यूनिक्स जैसे सिस्टम में मौजूद है। आप दैनिक, साप्ताहिक, मासिक या दिन के किसी विशिष्ट समय में निष्पादित करने के लिए कार्य शेड्यूल कर सकते हैं। Linux में ऑटोमेशन काफी हद तक क्रॉन जॉब्स पर निर्भर करता है।
क्रॉन्स शेड्यूल करने का सिंटैक्स नीचे दिया गया है:
# Cron job example
* * * * * sh /path/to/script.sh
यहां, *
प्रतिनिधित्व मिनट (ओं) घंटे (दिनों) दिन (महीने) कार्यदिवसों को क्रमशः दर्शाता है।
क्रॉन जॉब शेड्यूल करने के कुछ उदाहरण नीचे दिए गए हैं।
अनुसूची | अनुसूचित मान |
---|---|
5 0 * 8 * | अगस्त में 00:05 बजे। |
5 4 * * 6 | रविवार को 04:05 बजे। |
0 22 * * 1-5 | सोमवार से शुक्रवार तक सप्ताह के प्रत्येक दिन 22:00 बजे। |
आप इस ब्लॉग पोस्ट में क्रॉन के बारे में विस्तार से जान सकते हैं।
सिस्टम में मौजूदा स्क्रिप्ट की जांच कैसे करें
क्रोंटैब का उपयोग करना
crontab -l
किसी विशेष उपयोगकर्ता के लिए पहले से निर्धारित स्क्रिप्ट को सूचीबद्ध करता है।
ढूंढें कमांड का उपयोग करना
find
कमांड कुछ पैटर्न के आधार पर फाइलों का पता लगाने में मदद करता है। चूंकि अधिकांश स्क्रिप्ट .sh
. के साथ समाप्त होती हैं , हम इस तरह से खोज स्क्रिप्ट का उपयोग कर सकते हैं:
find . -type f -name "*.sh"
कहां,
.
वर्तमान निर्देशिका का प्रतिनिधित्व करता है। आप तदनुसार रास्ता बदल सकते हैं।-type f
इंगित करता है कि जिस फ़ाइल प्रकार की हम तलाश कर रहे हैं वह एक टेक्स्ट आधारित फ़ाइल है।*.sh
.sh
. के साथ समाप्त होने वाली सभी फाइलों से मेल खाने के लिए कहता है ।
यदि आप खोज कमांड के बारे में विस्तार से पढ़ना चाहते हैं, तो मेरी अन्य पोस्ट देखें।
रैप-अप करना
इस ट्यूटोरियल में हमने शेल स्क्रिप्टिंग की मूल बातें सीखीं। हमने उदाहरणों और वाक्य-विन्यास पर ध्यान दिया जो हमें सार्थक कार्यक्रम लिखने में मदद कर सकते हैं।
इस ट्यूटोरियल से आपने अपनी पसंदीदा चीज़ क्या सीखी? मुझे ट्विटर पर बताएं!
आप मेरी अन्य पोस्ट यहाँ पढ़ सकते हैं।
मैक्रोवेक्टर द्वारा बनाया गया वर्क वेक्टर - www.freepik.com