एक स्क्रिप्ट बस एक फ़ाइल में संग्रहीत कमांड्स की एक सूची है। टर्मिनल पर उन्हें एक-एक करके हर बार टाइप करने के बजाय कमांड्स के अनुक्रम को चलाने के लिए, एक सिस्टम उपयोगकर्ता उन सभी (कमांड्स) को एक फ़ाइल में संग्रहीत कर सकता है और कमांड्स को कई बार फिर से निष्पादित करने के लिए फ़ाइल को बार-बार आह्वान कर सकता है।
स्क्रिप्टिंग सीखते समय या स्क्रिप्ट लिखने के शुरुआती चरणों में, हम आमतौर पर कुछ कमांड लाइनों के साथ छोटी या छोटी स्क्रिप्ट लिखकर शुरू करते हैं। और हम आमतौर पर ऐसे स्क्रिप्ट्स को उनके आउटपुट को देखकर और यह सुनिश्चित करके डीबग करते हैं कि वे हमारे इरादे के अनुसार काम करते हैं।
हालांकि, जैसे ही हम हजारों कमांड लाइनों के साथ बहुत लंबी और उन्नत स्क्रिप्ट लिखना शुरू करते हैं, उदाहरण के लिए स्क्रिप्ट जो सिस्टम सेटिंग्स को संशोधित करती हैं, नेटवर्क पर महत्वपूर्ण बैकअप करती हैं, और बहुत कुछ, हमें एहसास होगा कि केवल स्क्रिप्ट के आउटपुट को देखना स्क्रिप्ट के भीतर बग खोजने के लिए पर्याप्त नहीं है।
इसलिए, Linux में शेल स्क्रिप्ट डीबगिंग की इस श्रृंखला में, हम शेल स्क्रिप्ट डीबगिंग को सक्षम करने के तरीके, बाद के क्रम में विभिन्न शेल स्क्रिप्ट डीबगिंग मोड्स और उनका उपयोग कैसे करें, के बारे में बताएंगे।
स्क्रिप्ट कैसे शुरू करें
एक स्क्रिप्ट को अन्य फ़ाइलों से इसकी पहली लाइन द्वारा अलग किया जाता है, जिसमें एक #! (She-bang - फ़ाइल प्रकार को परिभाषित करता है) और एक पथ नाम (इंटरप्रेटर का पथ) होता है जो सिस्टम को सूचित करता है कि फ़ाइल कमांड्स का एक संग्रह है जिसे निर्दिष्ट प्रोग्राम (इंटरप्रेटर) द्वारा व्याख्या किया जाएगा।
विभिन्न प्रकार की स्क्रिप्ट्स में "पहली लाइनों" के उदाहरण नीचे दिए गए हैं:
#!/bin/sh [sh स्क्रिप्टिंग के लिए] #!/bin/bash [bash स्क्रिप्टिंग के लिए] #!/usr/bin/perl [perl प्रोग्रामिंग के लिए] #!/bin/awk -f [awk स्क्रिप्टिंग के लिए]
नोट: यदि स्क्रिप्ट में केवल मानक सिस्टम कमांड्स का एक सेट होता है, बिना किसी आंतरिक शेल निर्देश के, तो पहली लाइन या #! को छोड़ा जा सकता है।
Linux में शेल स्क्रिप्ट कैसे निष्पादित करें
शेल स्क्रिप्ट को आह्वान करने का पारंपरिक सिंटैक्स है:
$ script_name argument1 ... argumentN
एक अन्य संभावित रूप है शेल को स्पष्ट रूप से निर्दिष्ट करके जो स्क्रिप्ट को निष्पादित करेगा:
$ shell script_name argument1 ... argumentN
उदाहरण के लिए:
$ /bin/bash script_name argument1 ... argumentN [bash स्क्रिप्टिंग के लिए] $ /bin/ksh script_name argument1 ... argumentN [ksh स्क्रिप्टिंग के लिए] $ /bin/sh script_name argument1 ... argumentN [sh स्क्रिप्टिंग के लिए]
ऐसी स्क्रिप्ट्स के लिए जिनमें पहली लाइन के रूप में #! नहीं है और केवल बुनियादी सिस्टम कमांड्स हैं जैसे नीचे दी गई:
#script containing standard system commands cd /home/$USER mkdir tmp echo "tmp directory created under /home/$USER"
बस इसे निष्पादन योग्य बनाएं और इसे निम्नानुसार चलाएं:
$ chmod +x script_name $ ./script_name
शेल स्क्रिप्ट डीबगिंग मोड सक्षम करने के तरीके
प्राथमिक शेल स्क्रिप्ट डीबगिंग विकल्प नीचे दिए गए हैं:
-v(वर्बोज़ के लिए छोटा) – शेल को स्क्रिप्ट में सभी लाइनों को प्रदर्शित करने के लिए कहता है जैसे ही वे पढ़ी जाती हैं, यह वर्बोज़ मोड सक्रिय करता है।-n(noexec या नो एक्ज़ीक्यूशन के लिए छोटा) – शेल को सभी कमांड्स पढ़ने का निर्देश देता है, हालांकि उन्हें निष्पादित नहीं करता है। यह विकल्प सिंटैक्स चेकिंग मोड सक्रिय करता है।-x(xtrace या एक्ज़ीक्यूशन ट्रेस के लिए छोटा) – शेल को सभी कमांड्स और उनके आर्गुमेंट्स को टर्मिनल पर प्रदर्शित करने के लिए कहता है जैसे ही वे निष्पादित होते हैं। यह विकल्प शेल ट्रेसिंग मोड सक्षम करता है।
1. शेल स्क्रिप्ट की पहली लाइन संशोधित करना
पहला तंत्र शेल स्क्रिप्ट की पहली लाइन को नीचे दिए अनुसार बदलकर है, यह पूरे स्क्रिप्ट की डीबगिंग सक्षम करेगा।
#!/bin/sh option(s)
उपरोक्त फॉर्म में, विकल्प ऊपर दिए गए डीबगिंग विकल्पों में से एक या संयोजन हो सकता है।
2. डीबगिंग विकल्पों के साथ शेल आह्वान करना
दूसरा तरीका डीबगिंग विकल्पों के साथ शेल को आह्वान करना है जैसा कि नीचे दिखाया गया है, यह विधि पूरे स्क्रिप्ट की डीबगिंग भी चालू करेगी।
$ shell option(s) script_name argument1 ... argumentN
उदाहरण के लिए:
$ /bin/bash option(s) script_name argument1 ... argumentN
3. सेट शेल बिल्ट-इन कमांड का उपयोग करना
तीसरा तरीका शेल स्क्रिप्ट के एक दिए गए खंड जैसे फ़ंक्शन को डीबग करने के लिए सेट बिल्ट-इन कमांड का उपयोग करना है। यह तंत्र महत्वपूर्ण है, क्योंकि यह हमें शेल स्क्रिप्ट के किसी भी खंड में डीबगिंग सक्रिय करने की अनुमति देता है।
हम नीचे दिए गए फॉर्म में सेट कमांड का उपयोग करके डीबगिंग मोड चालू कर सकते हैं, जहां विकल्प ऊपर दिए गए डीबगिंग विकल्पों में से कोई भी हो सकता है।
$ set option
डीबगिंग मोड सक्षम करने के लिए, उपयोग करें:
$ set -option
डीबगिंग मोड अक्षम करने के लिए, उपयोग करें:
$ set +option
इसके अलावा, यदि हमने शेल स्क्रिप्ट के विभिन्न खंडों में कई डीबगिंग मोड सक्षम किए हैं, तो हम उन सभी को एक साथ इस तरह अक्षम कर सकते हैं:
$ set -
शेल स्क्रिप्ट डीबगिंग मोड सक्षम करने के लिए अभी बस इतना ही। जैसा कि हमने देखा, हम या तो पूरे शेल स्क्रिप्ट या स्क्रिप्ट के एक विशेष खंड को डीबग कर सकते हैं।
इस श्रृंखला के अगले दो एपिसोड में, हम कवर करेंगे कि शेल स्क्रिप्ट डीबगिंग विकल्पों का उपयोग वर्बोज़ समझाएं, सिंटैक्स चेकिंग और शेल ट्रेसिंग डीबगिंग मोड्स को उदाहरणों के साथ कैसे करें।
महत्वपूर्ण रूप से, इस गाइड के बारे में कोई भी प्रश्न पूछना न भूलें या शायद नीचे कमेंट सेक्शन के माध्यम से हमें प्रतिक्रिया प्रदान करें। तब तक, Tecmint से जुड़े रहें।