Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

शेल स्क्रिप्ट में सिंटेक्स चेकिंग डिबगिंग मोड कैसे करें

हमने विभिन्न डिबगिंग विकल्पों और शेल स्क्रिप्ट डिबगिंग मोड को सक्षम करने के तरीके के बारे में बताकर शेल स्क्रिप्ट डिबगिंग श्रृंखला शुरू की।

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

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

वर्बोज़ डिबगिंग मोड सक्षम करना

इससे पहले कि हम इस गाइड के प्राथमिक फोकस पर जाएं, आइए संक्षेप में वर्बोज़ मोड . को देखें . यह -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 

संक्षेप में, हमें हमेशा यह सुनिश्चित करना चाहिए कि हम अपनी शेल स्क्रिप्ट को निष्पादित करने से पहले किसी भी त्रुटि को पकड़ने के लिए वाक्यात्मक रूप से जांच लें।

इस गाइड के संबंध में हमें कोई प्रश्न या प्रतिक्रिया भेजने के लिए, नीचे दिए गए प्रतिक्रिया फॉर्म का उपयोग करें। इस श्रृंखला के तीसरे भाग में, हम शेल ट्रेसिंग डिबगिंग मोड की व्याख्या करने और उसका उपयोग करने के लिए आगे बढ़ेंगे।


  1. शैल ट्रेसिंग के साथ शैल स्क्रिप्ट में कमांड के निष्पादन का पता कैसे लगाएं

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

  1. विम में शैल स्क्रिप्ट के लिए कस्टम हेडर टेम्पलेट कैसे बनाएं?

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

  1. USB डिबगिंग मोड और Android पर इसे कैसे सक्षम करें?

    कुछ ऐसा जो एक एंड्रॉइड उपयोगकर्ता को ज्ञान रखना चाहिए, जिसमें यूएसबी डिबगिंग शामिल है जो कि एक अद्भुत और छिपी हुई विशेषता है, जिसके साथ शुरू करना है। यह एक औसत उपयोगकर्ता के लिए महत्वपूर्ण नहीं लग सकता है लेकिन एक डेवलपर के लिए यह वास्तव में एक आवश्यक हिस्सा है। आगे बढ़ने से पहले, आइए इसके बारे में