हमने विभिन्न डिबगिंग विकल्पों और शेल स्क्रिप्ट डिबगिंग मोड को सक्षम करने के तरीके के बारे में बताकर शेल स्क्रिप्ट डिबगिंग श्रृंखला शुरू की।
आपकी शेल स्क्रिप्ट लिखने के बाद, यह अनुशंसा की जाती है कि हम स्क्रिप्ट्स को चलाने से पहले उनके सिंटैक्स को व्यावहारिक रूप से जांच लें, न कि उनके आउटपुट को देखने के विपरीत यह पुष्टि करने के लिए कि वे सही तरीके से काम कर रहे हैं।
श्रृंखला के इस भाग में, हम देखेंगे कि सिंटैक्स जाँच डिबगिंग मोड का उपयोग कैसे करें। याद रखें कि हमने इस श्रृंखला के पहले भाग में विभिन्न डिबगिंग विकल्पों की व्याख्या की थी और यहाँ, हम उनका उपयोग स्क्रिप्ट डिबगिंग करने के लिए करेंगे।
वर्बोज़ डिबगिंग मोड सक्षम करना
इससे पहले कि हम इस गाइड के प्राथमिक फोकस पर जाएं, आइए संक्षेप में वर्बोज़ मोड . को देखें . यह -v . द्वारा सक्षम है डिबगिंग विकल्प, जो शेल को पढ़ने के दौरान स्क्रिप्ट में सभी पंक्तियों को प्रदर्शित करने के लिए कहता है।
यह कैसे काम करता है, यह प्रदर्शित करने के लिए, पीएनजी छवियों को जेपीजी प्रारूप में परिवर्तित करने के लिए एक नमूना शेल स्क्रिप्ट नीचे दी गई है।
इसे एक फाइल में टाइप (या कॉपी और पेस्ट) करें।
#!/bin/bash
#convert
for image in *.png; do
convert "$image" "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
done
exit 0
में कनवर्ट करें फिर फ़ाइल को सहेजें और नीचे दिए गए आदेश का उपयोग करके स्क्रिप्ट को निष्पादन योग्य बनाएं:
$ chmod +x script.sh
हम स्क्रिप्ट का आह्वान कर सकते हैं और उसमें सभी पंक्तियों को प्रदर्शित कर सकते हैं जैसे वे शेल द्वारा पढ़ी जाती हैं:
$ bash -v script.sh
शेल स्क्रिप्ट में सिंटेक्स चेकिंग डिबगिंग मोड सक्षम करना
हमारे महत्व के विषय पर वापस आते हैं, -n सिंटैक्स जाँच मोड को सक्रिय करता है। यह शेल को मूल रूप से सभी कमांड को पढ़ने का निर्देश देता है, हालांकि उन्हें निष्पादित नहीं करता है, यह (शेल) केवल उपयोग किए गए सिंटैक्स की जांच करता है।
यदि आपकी शेल स्क्रिप्ट में त्रुटियां हैं, तो शेल टर्मिनल पर त्रुटियों को आउटपुट करेगा, अन्यथा, यह कुछ भी प्रदर्शित नहीं करता है।
सिंटैक्स जाँच को सक्रिय करने का सिंटैक्स इस प्रकार है:
$ bash -n script.sh
क्योंकि स्क्रिप्ट में सिंटैक्स सही है, ऊपर दिया गया कमांड कोई आउटपुट प्रदर्शित नहीं करेगा। इसलिए, आइए done को हटाने का प्रयास करें शब्द जो लूप के लिए बंद कर देता है और देखता है कि क्या यह कोई त्रुटि दिखाता है:
पीएनजी छवियों को jpg प्रारूप में परिवर्तित करने के लिए संशोधित शेल स्क्रिप्ट नीचे दी गई है जिसमें एक बग है।
#!/bin/bash
#script with a bug
#convert
for image in *.png; do
convert "$image" "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
exit 0
में कनवर्ट करें फ़ाइल को सहेजें, फिर उसमें सिंटैक्स जाँच करते समय इसे चलाएँ:
$ bash -n script.sh
उपरोक्त आउटपुट से, हम देख सकते हैं कि हमारी स्क्रिप्ट के साथ एक सिंटैक्स समस्या है, लूप के लिए एक क्लोजिंग done गुम है कीवर्ड शब्द। और शेल ने फ़ाइल के अंत तक इसकी तलाश की और एक बार इसे नहीं पाया (किया गया ), शेल ने एक सिंटैक्स त्रुटि मुद्रित की:
script.sh: line 11: syntax error: unexpected end of file
हम वर्बोज़ मोड और सिंटैक्स जाँच मोड को एक साथ जोड़ सकते हैं:
$ bash -vn script.sh
वैकल्पिक रूप से, हम अगले उदाहरण की तरह ऊपर की स्क्रिप्ट की पहली पंक्ति को संशोधित करके सिंटैक्स जाँच को सक्षम कर सकते हैं।
#!/bin/bash -n
#altering the first line of a script to enable syntax checking
#convert
for image in *.png; do
convert "$image" "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
exit 0
में कनवर्ट करें पहले की तरह, फ़ाइल को सहेजें और सिंटैक्स जाँच करते समय इसे चलाएँ:
$ ./script.sh script.sh: line 12: syntax error: unexpected end of file
इसके अलावा, हम उपरोक्त स्क्रिप्ट में डिबगिंग मोड को सक्षम करने के लिए सेट शेल बिल्ट-इन कमांड को नियोजित कर सकते हैं।
नीचे दिए गए उदाहरण में, हम केवल अपनी स्क्रिप्ट में लूप के सिंटैक्स की जांच कर रहे हैं।
#!/bin/bash
#using set shell built-in command to enable debugging
#convert
#enable debugging
set -n
for image in *.png; do
convert "$image" "${image%.png}.jpg"
echo "image $image converted to ${image%.png}.jpg"
#disable debugging
set +n
exit 0
एक बार फिर से फाइल को सेव करें और स्क्रिप्ट को इनवाइट करें:
$ ./script.sh
संक्षेप में, हमें हमेशा यह सुनिश्चित करना चाहिए कि हम अपनी शेल स्क्रिप्ट को निष्पादित करने से पहले किसी भी त्रुटि को पकड़ने के लिए वाक्यात्मक रूप से जांच लें।
इस गाइड के संबंध में हमें कोई प्रश्न या प्रतिक्रिया भेजने के लिए, नीचे दिए गए प्रतिक्रिया फॉर्म का उपयोग करें। इस श्रृंखला के तीसरे भाग में, हम शेल ट्रेसिंग डिबगिंग मोड की व्याख्या करने और उसका उपयोग करने के लिए आगे बढ़ेंगे।