हमने शेल स्क्रिप्ट डीबगिंग श्रृंखला को विभिन्न डीबगिंग विकल्पों और शेल स्क्रिप्ट डीबगिंग मोड्स को सक्षम करने के तरीके की व्याख्या करके शुरू किया।
अपनी शेल स्क्रिप्ट लिखने के बाद, यह अनुशंसा की जाती है कि हम उन्हें चलाने से पहले स्क्रिप्ट्स में सिंटैक्स को व्यावहारिक रूप से जांचें, बजाय इसके कि उनके आउटपुट को देखकर पुष्टि करें कि वे सही ढंग से काम कर रहे हैं।
इस श्रृंखला के इस भाग में, हम सिंटैक्स चेकिंग डीबगिंग मोड का उपयोग करने के तरीके पर जाएंगे। याद रखें हमने इस श्रृंखला के पहले भाग में विभिन्न डीबगिंग विकल्पों की व्याख्या की थी और यहां, हम स्क्रिप्ट डीबगिंग करने के लिए उनका उपयोग करेंगे।
वर्बोज़ डीबगिंग मोड सक्षम करना
इस गाइड के प्राथमिक फोकस पर जाने से पहले, आइए संक्षेप में वर्बोज़ मोड का पता लगाएं। यह -v डीबगिंग विकल्प द्वारा सक्षम है, जो शेल को स्क्रिप्ट में सभी लाइनों को प्रदर्शित करने का निर्देश देता है जैसे ही वे पढ़ी जाती हैं।
यह प्रदर्शित करने के लिए कि यह कैसे काम करता है, नीचे PNG इमेज को JPG फॉर्मेट में बैच कन्वर्ट करने के लिए एक नमूना शेल स्क्रिप्ट है।
इसे एक फ़ाइल में टाइप करें (या कॉपी और पेस्ट करें)।
#!/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 शब्द को हटाने का प्रयास करें और देखें कि क्या यह त्रुटि दिखाता है:
नीचे एक बग वाली PNG इमेज को 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 कीवर्ड शब्द गायब है। और शेल ने फ़ाइल के अंत तक इसकी तलाश की और एक बार जब इसे नहीं मिला (done), तो शेल ने एक सिंटैक्स त्रुटि प्रिंट की:
script.sh: line 11: syntax error: unexpected end of file
हम वर्बोज़ मोड और सिंटैक्स चेकिंग मोड को एक साथ भी जोड़ सकते हैं:
$ bash -vn script.sh
वैकल्पिक रूप से, हम ऊपर दिए गए अगले उदाहरण में स्क्रिप्ट की पहली लाइन को संशोधित करके सिंटैक्स चेकिंग सक्षम कर सकते हैं।
#!/bin/bash -n #स्क्रिप्ट की पहली लाइन को बदलकर सिंटैक्स चेकिंग सक्षम करना #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
सारांश में, हमें हमेशा यह सुनिश्चित करना चाहिए कि हम अपनी शेल स्क्रिप्ट्स को सिंटैक्टिकली जांचें ताकि उन्हें निष्पादित करने से पहले किसी भी त्रुटि को पकड़ा जा सके।
इस गाइड के संबंध में हमें कोई भी प्रश्न या प्रतिक्रिया भेजने के लिए नीचे दिए गए प्रतिक्रिया फॉर्म का उपयोग करें। इस श्रृंखला के तीसरे भाग में, हम शेल ट्रेसिंग डीबगिंग मोड की व्याख्या और उपयोग पर आगे बढ़ेंगे।