Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

शेल स्क्रिप्ट बनाना सबसे आवश्यक कौशल में से एक है जो लिनक्स उपयोगकर्ताओं की उंगलियों पर होना चाहिए। शेल स्क्रिप्ट दोहराए जाने वाले कार्यों को स्वचालित करने में एक बड़ी भूमिका निभाती है जो अन्यथा लाइन दर लाइन निष्पादित करना थकाऊ होगा।

इस ट्यूटोरियल में, हम कुछ बुनियादी शेल स्क्रिप्टिंग ऑपरेशंस को हाइलाइट करते हैं जो हर लिनक्स उपयोगकर्ता के पास होने चाहिए।

1. एक साधारण शेल स्क्रिप्ट बनाएं

एक शेल स्क्रिप्ट एक फ़ाइल है जिसमें ASCII टेक्स्ट होता है। हम एक साधारण शेल स्क्रिप्ट बनाकर शुरू करेंगे, और ऐसा करने के लिए, हम एक टेक्स्ट एडिटर का उपयोग करेंगे। काफी संख्या में टेक्स्ट एडिटर हैं, कमांड-लाइन और GUI-आधारित दोनों। इस गाइड के लिए, हम vim एडिटर का उपयोग करेंगे।

हम एक साधारण स्क्रिप्ट बनाकर शुरू करेंगे जो निष्पादित होने पर "Hello world" प्रदर्शित करती है।

$ vim hello.sh

फ़ाइल में निम्नलिखित सामग्री पेस्ट करें और सेव करें।

#!/bin/bash
# Print Hello world message
echo "Hello World!"

आइए शेल स्क्रिप्ट को लाइन दर लाइन देखें।

  • पहली लाइन - #!/bin/bash - को shebang हेडर के रूप में जाना जाता है। यह एक विशेष निर्माण है जो इंगित करता है कि स्क्रिप्ट की व्याख्या करने के लिए किस प्रोग्राम का उपयोग किया जाएगा। इस मामले में, यह bash शेल होगा जिसे /bin/bash द्वारा इंगित किया गया है। अन्य स्क्रिप्टिंग भाषाएं हैं जैसे Python जिसे #!/usr/bin/python3 द्वारा दर्शाया गया है और Perl जिसका shebang हेडर #!/usr/bin/perl द्वारा दर्शाया गया है।
  • दूसरी लाइन एक कमेंट है। एक कमेंट एक स्टेटमेंट है जो वर्णन करता है कि शेल स्क्रिप्ट क्या करती है और जब स्क्रिप्ट चलाई जाती है तो निष्पादित नहीं होती। कमेंट हमेशा हैश साइन # से पहले होते हैं।
  • आखिरी लाइन वह कमांड है जो टर्मिनल पर 'Hello World' संदेश प्रिंट करती है।

अगला कदम chmod कमांड का उपयोग करके एक्जीक्यूट परमिशन असाइन करके स्क्रिप्ट को एक्जीक्यूटेबल बनाना है जैसा कि दिखाया गया है।

$ chmod +x hello.sh

अंत में, निम्न में से किसी भी कमांड का उपयोग करके शेल स्क्रिप्ट चलाएं:

$ bash hello.sh OR $ ./hello.sh
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

2. कोड निष्पादित करने के लिए कंडीशनल स्टेटमेंट्स का उपयोग करना

अन्य प्रोग्रामिंग भाषाओं की तरह, कंडीशनल स्टेटमेंट्स का उपयोग bash स्क्रिप्टिंग में निर्णय लेने के लिए किया जाता है, केवल सिंटैक्स में मामूली अंतर के साथ। हम if, if-else, और elif कंडीशनल स्टेटमेंट्स को कवर करने जा रहे हैं।

केवल if स्टेटमेंट का उदाहरण

if स्टेटमेंट का उपयोग सिंगल या मल्टीपल कंडीशंस को टेस्ट करने के लिए किया जा सकता है। हम if स्टेटमेंट के मौलिक उपयोग के साथ शुरू करेंगे ताकि सिंगल कंडीशन को टेस्ट किया जा सके। if स्टेटमेंट if ... fi ब्लॉक्स द्वारा परिभाषित किया जाता है।

if command
then
  statement
fi

नीचे दिए गए शेल स्क्रिप्ट पर एक नज़र डालें।

#!/bin/bash
echo 'Enter the score'
read x
if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

उपरोक्त शेल स्क्रिप्ट उपयोगकर्ता को एक स्कोर प्रदान करने के लिए प्रेरित करती है जिसे फिर वेरिएबल x में स्टोर किया जाता है। यदि स्कोर 70 से मेल खाता है, तो स्क्रिप्ट आउटपुट "Good job!" लौटाती है। तुलना ऑपरेटर == का उपयोग यह टेस्ट करने के लिए किया जाता है कि वेरिएबल x में स्टोर किया गया दर्ज स्कोर 100 के बराबर है या नहीं।

लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

अन्य तुलना ऑपरेटर्स जिनका आप उपयोग कर सकते हैं उनमें शामिल हैं:

  • -eq - बराबर
  • -ne - बराबर नहीं
  • -lt - कम
  • -le - कम या बराबर
  • -gt - अधिक
  • -ge - अधिक या बराबर

उदाहरण के लिए, नीचे दिया गया if-statement ब्लॉक 'Work Harder' प्रिंट करता है यदि इनपुट स्कोर 50 से कम कोई मान है।

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

if-else स्टेटमेंट का उदाहरण

ऐसी स्थितियों के लिए जहां आपके पास 2 संभावित परिणाम होते हैं: - चाहे यह हो या वह - if-else स्टेटमेंट काम आता है।

if command
then
  statement1
else
  statement2
fi

नीचे दी गई स्क्रिप्ट इनपुट स्कोर पढ़ती है और जांचती है कि यह 70 से अधिक या बराबर है या नहीं।

यदि स्कोर 70 से अधिक या बराबर है, तो आपको 'Great job, You passed!' संदेश मिलता है। हालांकि, यदि स्कोर 70 से नीचे आता है, तो आउटपुट 'You failed' प्रिंट किया जाएगा।

#!/bin/bash
echo 'Enter the score'
read x
if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo 'You failed'
fi
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

if-elif-else स्टेटमेंट का उदाहरण

ऐसे परिदृश्यों में जहां कई शर्तें और अलग-अलग परिणाम होते हैं, if-elif-else स्टेटमेंट का उपयोग किया जाता है। यह स्टेटमेंट निम्नलिखित फॉर्मेट लेता है।

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

उदाहरण के लिए, हमारे पास एक लॉटरी के लिए एक स्क्रिप्ट है जो जांचती है कि दर्ज नंबर या तो 90, 60 या 30 है।

#!/bin/bash
echo 'Enter the score'
read x
if [[ $x -eq 90 ]]; then
  echo "You have won the First Prize"
elif [[ $x -eq 60 ]]; then
  echo "You have won the Second Prize"
elif [[ $x -eq 30 ]]; then
  echo "You have won the Second Prize"
else
  echo "Please try again"
fi
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

3. AND लॉजिक के साथ If स्टेटमेंट का उपयोग करना

आप if स्टेटमेंट का उपयोग AND लॉजिक ऑपरेटर के साथ कर सकते हैं ताकि यदि दो शर्तें पूरी होती हैं तो एक कार्य निष्पादित किया जाए। && ऑपरेटर का उपयोग AND लॉजिक को दर्शाने के लिए किया जाता है।

#!/bin/bash
echo 'Please Enter your user_id'
read user_id
echo 'Please Enter your tag_no'
read tag_id
if [[ ($user_id == "tecmint" && $tag_id -eq 3990) ]]; then
  echo "Login successful"
else
  echo "Login failure"
fi

5. OR लॉजिक के साथ If स्टेटमेंट का उपयोग करना

OR लॉजिक का उपयोग करते समय, जिसे || सिंबल द्वारा दर्शाया जाता है, स्क्रिप्ट को अपेक्षित परिणाम देने के लिए शर्तों में से किसी एक को पूरा करने की आवश्यकता होती है।

#!/bin/bash
echo 'Please enter a random number'
read number
if [[ (number -eq 55 || number -eq 80) ]]; then
  echo 'Congratulations! You've won'
else
  echo 'Sorry, try again'
fi
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

लूपिंग निर्माणों का उपयोग करें

Bash लूप्स उपयोगकर्ताओं को एक निश्चित परिणाम प्राप्त होने तक कार्यों की एक श्रृंखला करने की अनुमति देते हैं। यह दोहराए जाने वाले कार्यों को करने में काम आता है। इस सेक्शन में, हम कुछ लूप्स पर एक नज़र डालेंगे जिन्हें आप अन्य प्रोग्रामिंग भाषाओं में भी पाएंगे।

While लूप

यह काम करने के लिए सबसे आसान लूप्स में से एक है। सिंटैक्स काफी सरल है:

while 
do
  commands
done

नीचे दिया गया while लूप निष्पादित होने पर 1 से 10 तक की सभी संख्याओं को सूचीबद्ध करता है।

#!/bin/bash
# A simple while loop
counter=1
while [ $counter -le 10 ]
do
  echo $counter
  ((counter++))
done

आइए while लूप पर चर्चा करें:

वेरिएबल counter को 1 पर इनिशियलाइज़ किया गया है। और जब तक वेरिएबल 10 से कम या बराबर है, काउंटर का मान तब तक इंक्रीमेंट किया जाएगा जब तक शर्त पूरी नहीं हो जाती। लाइन echo $counter 1 से 10 तक की सभी संख्याओं को प्रिंट करती है।

लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

For लूप

While लूप की तरह, एक for लूप कोड को इटरेटिवली निष्पादित करने के लिए उपयोग किया जाता है। यानी उपयोगकर्ता द्वारा परिभाषित कई बार कोड निष्पादन दोहराएं।

सिंटैक्स है:

for var in 1 2 3 4 5 N
do
  command1
  command2
done

नीचे दिया गया for लूप 1 से 10 तक इटरेट करता है और उनके मानों को स्क्रीन पर प्रोसेस करता है।

लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

इसे प्राप्त करने का एक बेहतर तरीका डबल कर्ली ब्रेसेस { } का उपयोग करके रेंज को परिभाषित करना है जैसा कि दिखाया गया है, सभी नंबर टाइप करने के बजाय।

#!/bin/bash
# Specify range in a for loop
for num in {1..10}
do
  echo $num
done

Bash पोजिशनल पैरामीटर्स

एक पोजिशनल पैरामीटर एक विशेष वेरिएबल है जिसे स्क्रिप्ट में संदर्भित किया जाता है जब मान शेल पर पास किए जाते हैं लेकिन असाइन नहीं किए जा सकते। पोजिशनल पैरामीटर्स $0 $1 $2 $3 ... से $9 तक चलते हैं। $9 मान से आगे, पैरामीटर्स को कर्ली ब्रैकेट्स में संलग्न करना होगा जैसे ${10}, ${11} ... और इसी तरह।

स्क्रिप्ट निष्पादित करते समय, पहला पोजिशनल पैरामीटर जो $0 है, शेल स्क्रिप्ट का नाम लेता है। $1 पैरामीटर टर्मिनल पर पास किए गए पहले वेरिएबल को लेता है, $2 दूसरा लेता है, $3 तीसरा और इसी तरह।

आइए नीचे दिखाए अनुसार test.sh स्क्रिप्ट बनाएं।

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

अब, स्क्रिप्ट को निष्पादित करें और पहले और दूसरे नाम को तर्क के रूप में प्रदान करें:

# bash test.sh James Kiarie
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

आउटपुट से, हम देख सकते हैं कि प्रिंट किया गया पहला वेरिएबल शेल स्क्रिप्ट का नाम है, इस मामले में, test.sh। इसके बाद, नाम शेल स्क्रिप्ट में परिभाषित पोजिशनल पैरामीटर्स के अनुरूप प्रिंट किए जाते हैं।

पोजिशनल पैरामीटर्स उपयोगी हैं क्योंकि वे आपको स्पष्ट रूप से एक वेरिएबल को मान असाइन करने के बजाय दर्ज किए जा रहे डेटा को कस्टमाइज़ करने में मदद करते हैं।

शेल कमांड एग्जिट कोड्स

आइए एक सरल सवाल का जवाब देकर शुरू करें, एग्जिट कोड क्या है?

उपयोगकर्ता या शेल स्क्रिप्ट द्वारा शेल पर निष्पादित हर कमांड का एक एग्जिट स्टेटस होता है। एग्जिट स्टेटस एक इंटीजर है।

0 का एग्जिट स्टेटस इंगित करता है कि कमांड बिना किसी त्रुटि के सफलतापूर्वक निष्पादित हुआ। 1 से 255 के बीच कुछ भी दर्शाता है कि कमांड विफल हुआ या सफलतापूर्वक निष्पादित नहीं हुआ।

कमांड के एग्जिट स्टेटस को खोजने के लिए, $? शेल वेरिएबल का उपयोग करें।

1 का एग्जिट स्टेटस सामान्य त्रुटि या किसी भी अनुचित त्रुटि की ओर इशारा करता है जैसे बिना sudo परमिशन के फ़ाइलें एडिट करना।

2 का एग्जिट स्टेटस कमांड या बिल्टइन शेल वेरिएबल के गलत उपयोग की ओर इशारा करता है।

127 एग्जिट स्टेटस एक अवैध कमांड की ओर इशारा करता है जो आमतौर पर 'command not found' त्रुटि देता है।

लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

स्क्रिप्ट के भीतर शेल कमांड्स के आउटपुट को प्रोसेस करना

Bash स्क्रिप्टिंग में, आप भविष्य के उपयोग के लिए एक वेरिएबल में कमांड के आउटपुट को स्टोर कर सकते हैं। इसे शेल कमांड सब्स्टीट्यूशन भी कहा जाता है और इसे निम्न तरीकों से प्राप्त किया जा सकता है।

variable=$(command) OR variable=$(/path/to/command) OR variable=$(command argument 1 argument 2 ...)

उदाहरण के लिए, आप date कमांड को today नामक वेरिएबल में स्टोर कर सकते हैं और वर्तमान तारीख प्रकट करने के लिए शेल स्क्रिप्ट को कॉल कर सकते हैं।

#!/bin/bash
today=$(date)
echo "Today is $today"
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

आइए एक और उदाहरण लें। मान लीजिए आप अपने लिनक्स सिस्टम पर वैध लॉगिन उपयोगकर्ताओं को ढूंढना चाहते हैं। आप इसके बारे में कैसे जाएंगे? पहले, सभी उपयोगकर्ताओं (सिस्टम, प्रोसेस, और लॉगिन उपयोगकर्ता दोनों) की सूची /etc/passwd फ़ाइल में स्टोर की जाती है।

फ़ाइल देखने के लिए, आपको cat कमांड का उपयोग करना होगा। हालांकि, लॉगिन उपयोगकर्ताओं तक सीमित करने के लिए, /bin/bash एट्रिब्यूट वाले उपयोगकर्ताओं को खोजने के लिए grep कमांड का उपयोग करें और पहले 10 कैरेक्टर्स प्रदर्शित करने के लिए cut -c 1-10 कमांड का उपयोग करें जैसा कि दिखाया गया है।

हमने cat कमांड को login_users वेरिएबल में स्टोर किया है।

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:'
echo $login_users
लिनक्स में सरल शेल स्क्रिप्ट्स में मास्टरी: चरण-दर-चरण गाइड

यह सरल शेल स्क्रिप्ट बनाने पर हमारे ट्यूटोरियल का अंत करता है। हमें उम्मीद है कि आपको यह मूल्यवान लगा।

  1. Bash  Until  लूप को मास्टर करें: शेल स्क्रिप्ट्स के लिए चरण-दर-चरण गाइड Bash 'Until' लूप को मास्टर करें: शेल स्क्रिप्ट्स के लिए चरण-दर-चरण गाइड

    Bash में for, while, और until तीन लूप निर्माण हैं। जबकि प्रत्येक लूप सिंटैक्टिकली और कार्यात्मक रूप से भिन्न होता है, उनका उद्देश्य एक निश्चित अभिव्यक्ति के मूल्यांकन होने पर कोड ब्लॉक पर पुनरावृति करना है। Until लूप का उपयोग कोड ब्लॉक को तब तक निष्पादित करने के लिए किया जाता है जब तक कि अभिव्यक्ति

  1. शेल स्क्रिप्ट सिंटैक्स चेकिंग में मास्टरी: एक व्यावहारिक डीबगिंग गाइड शेल स्क्रिप्ट सिंटैक्स चेकिंग में मास्टरी: एक व्यावहारिक डीबगिंग गाइड

    हमने शेल स्क्रिप्ट डीबगिंग श्रृंखला को विभिन्न डीबगिंग विकल्पों और शेल स्क्रिप्ट डीबगिंग मोड्स को सक्षम करने के तरीके की व्याख्या करके शुरू किया। अपनी शेल स्क्रिप्ट लिखने के बाद, यह अनुशंसा की जाती है कि हम उन्हें चलाने से पहले स्क्रिप्ट्स में सिंटैक्स को व्यावहारिक रूप से जांचें, बजाय इसके कि उनके

  1. Vim में बैश स्क्रिप्ट हेडर्स स्वचालित करें: आसान कस्टम टेम्पलेट सेटअप Vim में बैश स्क्रिप्ट हेडर्स स्वचालित करें: आसान कस्टम टेम्पलेट सेटअप

    इस लेख में, हम आपको Vim एडिटर में नए बनाए गए सभी बैश स्क्रिप्ट्स के लिए एक कस्टम हेडर कॉन्फ़िगर करने का एक सरल तरीका दिखाएंगे। इसका मतलब है कि हर बार जब आप vi/vim एडिटर का उपयोग करके एक नई .sh फ़ाइल खोलते हैं, तो कस्टम हेडर स्वचालित रूप से फ़ाइल में जोड़ दिया जाएगा। कस्टम बैश स्क्रिप्ट हेडर टेम्पलेट