शेल स्क्रिप्ट बनाना सबसे आवश्यक कौशलों में से एक है जो लिनक्स उपयोगकर्ताओं के पास अपनी उंगलियों की नोक पर होना चाहिए। शेल स्क्रिप्ट दोहराए जाने वाले कार्यों को स्वचालित करने में एक बहुत बड़ी भूमिका निभाते हैं जो अन्यथा लाइन दर लाइन थकाऊ निष्पादन होगा।
इस ट्यूटोरियल में, हम कुछ बुनियादी शेल स्क्रिप्टिंग ऑपरेशंस पर प्रकाश डालते हैं जो प्रत्येक लिनक्स उपयोगकर्ता के पास होने चाहिए।
<एच3>1. एक साधारण शेल स्क्रिप्ट बनाएंशेल स्क्रिप्ट एक फ़ाइल है जिसमें ASCII . शामिल है मूलपाठ। हम एक साधारण शेल स्क्रिप्ट बनाकर शुरू करेंगे, और ऐसा करने के लिए, हम एक टेक्स्ट एडिटर का उपयोग करेंगे। कमांड लाइन और जीयूआई आधारित दोनों तरह के टेक्स्ट एडिटर काफी संख्या में हैं। इस गाइड के लिए, हम विम संपादक का उपयोग करेंगे।
हम एक साधारण स्क्रिप्ट बनाकर शुरुआत करेंगे जो "नमस्ते दुनिया . प्रदर्शित करती है "जब निष्पादित किया गया।
$ vim hello.sh
फ़ाइल में निम्न सामग्री चिपकाएँ और सहेजें।
#!/bin/bash # Print Hello world message echo "Hello World!"
आइए शेल स्क्रिप्ट लाइन को लाइन दर लाइन देखें।
- पहली पंक्ति -
#!/bin/bash
- शेबैंग हेडर के रूप में जाना जाता है। यह एक विशेष निर्माण है जो इंगित करता है कि स्क्रिप्ट की व्याख्या करने के लिए किस प्रोग्राम का उपयोग किया जाएगा। इस मामले में, यह बैश . होगा शेल /bin/bash . द्वारा इंगित किया गया है . अन्य स्क्रिप्टिंग भाषाएं हैं जैसे पायथन जिसे#!/usr/bin/python3
. द्वारा दर्शाया जाता है और पर्ल जिसका शेबैंग हैडर#!/usr/bin/perl
. द्वारा दर्शाया गया है । - दूसरी पंक्ति एक टिप्पणी है। एक टिप्पणी एक बयान है जो वर्णन करता है कि एक शेल स्क्रिप्ट क्या करती है और जब स्क्रिप्ट चलती है तो उसे निष्पादित नहीं किया जाता है। टिप्पणियाँ हमेशा हैश चिह्न से पहले होती हैं
#
। - आखिरी लाइन वह कमांड है जो 'हैलो वर्ल्ड . को प्रिंट करती है टर्मिनल पर संदेश।
अगला चरण chmod . का उपयोग करके निष्पादन अनुमति प्रदान करके स्क्रिप्ट को निष्पादन योग्य बनाना है दिखाए गए अनुसार आदेश।
$ chmod +x hello.sh
अंत में, किसी भी कमांड का उपयोग करके शेल स्क्रिप्ट चलाएँ:
$ bash hello.sh OR $ ./hello.sh<एच3>2. कोड निष्पादित करने के लिए सशर्त कथनों का उपयोग करना
अन्य प्रोग्रामिंग भाषाओं की तरह, सशर्त कथन निर्णय लेने के लिए बैश स्क्रिप्टिंग में उपयोग किया जाता है, सिंटैक्स में केवल थोड़ी भिन्नता के साथ। हम अगर . को कवर करने जा रहे हैं , यदि-अन्य, और एलिफ़ सशर्त बयान।
केवल if Statement का उदाहरण
अगर कथन का उपयोग एकल या एकाधिक स्थितियों का परीक्षण करने के लिए किया जा सकता है। हम 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 . के अनुरूप है , स्क्रिप्ट आउटपुट देता है “अच्छा काम! " तुलना ऑपरेटर ==
यह जांचने के लिए प्रयोग किया जाता है कि क्या स्कोर दर्ज किया गया है, जो चर x . में संग्रहीत है , 100 . के बराबर है ।
आप जिन अन्य तुलना ऑपरेटरों का उपयोग कर सकते हैं उनमें शामिल हैं:
-eq
- बराबर-ne
- के बराबर नहीं-lt
- इससे कम-le
- इससे कम या इसके बराबर-lt
- इससे कम-ge
- इससे बड़ा या इसके बराबर
उदाहरण के लिए, if-statement नीचे ब्लॉक करें प्रिंट आउट 'अधिक मेहनत करें ' यदि इनपुट स्कोर 50 . से कम कोई मान है ।
if [[ $x -lt 50 ]]; then echo 'Work Harder!' fi
अगर-और-कथन का उदाहरण
उन स्थितियों के लिए जहां आपके 2 संभावित परिणाम हैं:- चाहे यह या वह - अगर-और कथन काम में आता है।
if command then statement1 else statement2 fi
नीचे दी गई स्क्रिप्ट इनपुट स्कोर को पढ़ती है और जांचती है कि यह 70 . से अधिक या बराबर है या नहीं ।
यदि स्कोर 70 . से अधिक या उसके बराबर है , आपको एक 'शानदार नौकरी, आप उत्तीर्ण हो गए! ' संदेश। हालांकि, अगर स्कोर 70 . से नीचे आता है , आउटपुट 'आप विफल ' प्रिंट किया जाएगा।
#!/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>3. AND लॉजिक के साथ if Statement का उपयोग करना
आप अगर . का उपयोग कर सकते हैं और . के साथ कथन लॉजिक ऑपरेटर एक कार्य को निष्पादित करने के लिए यदि दो शर्तें पूरी होती हैं। &&
ऑपरेटर का प्रयोग और . को दर्शाने के लिए किया जाता है तर्क।
#!/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 Statement का उपयोग करना
या . का उपयोग करते समय तर्क, जिसे ||
. द्वारा दर्शाया जाता है प्रतीक, अपेक्षित परिणाम देने के लिए किसी एक शर्त को स्क्रिप्ट से संतुष्ट होना चाहिए।
#!/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
लूपिंग कंस्ट्रक्शंस का उपयोग करें
बैश लूप उपयोगकर्ताओं को एक निश्चित परिणाम प्राप्त होने तक कार्यों की एक श्रृंखला करने की अनुमति देता है। यह दोहराए जाने वाले कार्यों को करने में काम आता है। इस खंड में, हम कुछ लूपों पर एक नज़र डालेंगे जो आपको अन्य प्रोग्रामिंग भाषाओं में भी मिलेंगे।
लूप के दौरान
यह काम करने के लिए सबसे आसान छोरों में से एक है। वाक्य रचना काफी सरल है:
while <some test> do commands done
जबकि नीचे दिया गया लूप निष्पादित होने पर 1 से 10 तक की सभी संख्याओं को सूचीबद्ध करता है।
#!/bin/bash # A simple while loop counter=1 while [ $counter -le 10 ] do echo $counter ((counter++)) done
चलो लूप पर चर्चा करते हैं:
चर काउंटर 1 . से प्रारंभ किया गया है . और जबकि वेरिएबल 10 . से कम या उसके बराबर है , काउंटर का मूल्य तब तक बढ़ाया जाएगा जब तक कि शर्त पूरी नहीं हो जाती। पंक्ति $काउंटर प्रतिध्वनित करें 1 से 10 तक के सभी नंबरों को प्रिंट करता है।
लूप के लिए
थोड़ी देर की तरह लूप , एक लूप के लिए कोड को पुनरावृत्त रूप से निष्पादित करने के लिए उपयोग किया जाता है। अर्थात। उपयोगकर्ता द्वारा परिभाषित जितनी बार संभव हो कोड निष्पादन दोहराएं।
वाक्य रचना है:
for var in 1 2 3 4 5 N do command1 command2 done
लूप के लिए नीचे 1 से 10 के माध्यम से पुनरावृत्त होता है और स्क्रीन पर उनके मूल्यों को संसाधित करता है।
इसे प्राप्त करने का एक बेहतर तरीका डबल कर्ली ब्रेसिज़ का उपयोग करके एक श्रेणी को परिभाषित करना है { }
जैसा कि सभी नंबरों को टाइप करने के बजाय दिखाया गया है।
#!/bin/bash # Specify range in a for loop for num in {1..10} do echo $num done
बैश स्थितीय पैरामीटर
एक स्थितीय पैरामीटर एक विशेष चर है जिसे स्क्रिप्ट में संदर्भित किया जाता है जब मान को शेल पर पारित किया जाता है लेकिन असाइन नहीं किया जा सकता है। स्थितीय पैरामीटर $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 . के बीच कुछ भी दिखाता है कि आदेश विफल हुआ या सफलतापूर्वक निष्पादित नहीं हुआ।
किसी आदेश की निकास स्थिति जानने के लिए, $?
. का उपयोग करें शैल चर।
एक सामान्य त्रुटि या किसी भी अनुमेय त्रुटि जैसे कि sudo अनुमतियों के बिना फ़ाइलों को संपादित करने के लिए 1 अंक की निकास स्थिति।
एक कमांड या बिल्टिन शेल वैरिएबल के गलत उपयोग के लिए 2 अंक की निकास स्थिति।
127 निकास स्थिति एक अवैध कमांड की ओर इशारा करती है जो आमतौर पर 'आदेश नहीं मिला . उत्पन्न करती है ' त्रुटि।
एक स्क्रिप्ट के भीतर शेल कमांड के आउटपुट को प्रोसेस करना
बैश स्क्रिप्टिंग में, आप भविष्य में उपयोग के लिए एक कमांड के आउटपुट को एक वेरिएबल में स्टोर कर सकते हैं। इसे शेल कमांड प्रतिस्थापन के रूप में भी जाना जाता है और इसे निम्नलिखित तरीकों से प्राप्त किया जा सकता है।
variable=$(command) OR variable=$(/path/to/command) OR variable=$(command argument 1 argument 2 ...)
उदाहरण के लिए, आप तारीख . को स्टोर कर सकते हैं आज . नामक चर में कमांड और वर्तमान तिथि को प्रकट करने के लिए शेल स्क्रिप्ट को कॉल करें।
#!/bin/bash today=$(date) echo “Today is $today”
आइए एक और उदाहरण लेते हैं। मान लीजिए आप अपने लिनक्स सिस्टम पर वैध लॉगिन उपयोगकर्ता ढूंढना चाहते हैं। आप इसके बारे में कैसे जाएंगे? सबसे पहले, सभी उपयोगकर्ताओं (सिस्टम, प्रक्रिया और लॉगिन उपयोगकर्ता दोनों) की सूची /etc/passwd में संग्रहीत की जाती है फ़ाइल।
फ़ाइल देखने के लिए, आपको कैट कमांड का उपयोग करना होगा। हालांकि, उपयोगकर्ताओं में लॉग इन करने के लिए, /bin/bash वाले उपयोगकर्ताओं को खोजने के लिए grep कमांड का उपयोग करें विशेषता और कट-सी 1-10 . का उपयोग करें नाम के पहले 10 वर्णों को प्रदर्शित करने के लिए दिखाया गया आदेश।
हमने बिल्ली कमांड . को संगृहीत कर लिया है 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
यह सरल शेल स्क्रिप्ट बनाने पर हमारे ट्यूटोरियल को समाप्त करता है। हमें उम्मीद है कि आपको यह मूल्यवान लगा होगा।