बैश स्क्रिप्ट को कैसे डिबग करें?

How Debug Bash Script




उपभोक्ताओं तक पहुंचने से पहले किसी भी कार्यक्रम को त्रुटियों से मुक्त होना चाहिए। सॉफ़्टवेयर डेवलपर सॉफ़्टवेयर प्रोग्राम को बग-मुक्त बनाने की पूरी कोशिश करते हैं। लेकिन जब हजारों लाइनें हों तो कोड को दोषरहित बनाना कठिन होता है। डिबगिंग एक सतत प्रक्रिया है; यह त्रुटियों का तुरंत पता लगाने, कोड के बारे में बहुमूल्य जानकारी एकत्र करने और अनावश्यक कोड खंड को समाप्त करने में मदद करता है।

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







लिनक्स में शेल क्या है?

जब आप अपने कंप्यूटर को बूट करते हैं, तो कर्नेल संलग्न हार्डवेयर के बारे में जानकारी प्राप्त करता है और अन्य संलग्न घटकों को इंटरैक्ट करने की अनुमति देता है। इसके अलावा, यह मेमोरी, सीपीयू का प्रबंधन करता है और किसी भी नए परिधीय को पहचानता है। कुल मिलाकर, कर्नेल किसी भी ऑपरेटिंग सिस्टम की रीढ़ होता है। लेकिन क्या आपने कभी कर्नेल के साथ सीधे बातचीत करने के बारे में सोचा है, इसे एक विशिष्ट कार्य करने के लिए आदेश दें? क्या ऐसा करना व्यावहारिक भी है? बिल्कुल! एक शेल की मदद से, एक इंटरेक्टिव इंटरफेस वाला एक कंप्यूटर प्रोग्राम, कोई भी कर्नेल को संचालित कर सकता है। खोल मनुष्यों को कर्नेल के साथ बातचीत करने और किसी भी कार्य को करने के लिए निर्देश देने की अनुमति देता है।



यूनिक्स में, दो मुख्य गोले हैं बॉर्न शेल तथा सी खोल . इन दोनों प्रकारों की अपनी उपश्रेणियाँ हैं। विभिन्न प्रकार के बॉर्न शेल हैं कॉर्न शेल (ksh), अल्मक्विस्ट शेल (राख), बॉर्न अगेन शेल (बैश), तथा जेड शेल (zsh) . उसी समय, C शेल की अपनी उपश्रेणियाँ होती हैं जैसे सी खोल (सीएसएच) तथा टेनेक्स सी शेल (टीसीएसएच) . जैसा कि ऊपर उल्लेख किया गया है, सभी गोले में से, बैश (बॉर्न अगेन शेल) सबसे व्यापक रूप से उपयोग किया जाने वाला शेल है और इसकी दक्षता और उपयोगकर्ता-मित्रता के कारण कई लिनक्स वितरणों में बॉक्स से बाहर आता है।



बैश कई लिनक्स वितरणों का डिफ़ॉल्ट खोल है और लाखों लिनक्स उपयोगकर्ताओं द्वारा व्यापक रूप से उपयोग किया जाता है। यह इतना विविध और प्रभावशाली है कि यह आपके द्वारा आमतौर पर जीयूआई-आधारित अनुप्रयोगों में किए जाने वाले प्रत्येक कार्य को कर सकता है। आप फ़ाइलें संपादित कर सकते हैं, फ़ाइलें प्रबंधित कर सकते हैं, फ़ोटो देख सकते हैं, संगीत सुन सकते हैं, वीडियो चला सकते हैं और बहुत कुछ कर सकते हैं।





शेल स्क्रिप्ट क्या है:

जैसा कि हमने शेल के मूल विचार को सीख लिया है, अब शेल स्क्रिप्टिंग की ओर बढ़ते हैं। शेल स्क्रिप्ट एक कंप्यूटर प्रोग्राम है जो एक शेल में कई कमांड निष्पादित करता है जो एक विशिष्ट कार्य करने के लिए दुभाषिया के रूप में कार्य करता है। जैसा कि ऊपर चर्चा की गई है, 2 विशेष प्रकार के गोले हैं। हालाँकि, यह मार्गदर्शिका बॉर्न अगेन शेल (बैश) पर ध्यान केंद्रित कर रही है।
तो बैश स्क्रिप्ट क्या है? लिनक्स में, सभी बैश कमांड को स्टोर किया जाता है /usr/bin और /bin फ़ोल्डर्स उदाहरण के लिए, जब भी आप कोई कमांड चलाते हैं, तो बैश खोजता है कि यह निर्देशिका में मौजूद है या नहीं। कमांड निष्पादित हो जाता है यदि यह निर्देशिकाओं में पाता है तो कोई त्रुटि देता है।

टर्मिनल में चलाने के लिए एक से अधिक कमांड की आवश्यकता वाले कार्य को करने के बारे में कैसे? इस विशिष्ट स्थिति में, बैश स्क्रिप्टिंग आपकी मदद कर सकती है। बैश स्क्रिप्टिंग शेल स्क्रिप्टिंग का एक रूप है जो आपको एक विशिष्ट कार्य करने के लिए कई बैश कमांड चलाने के लिए प्रोग्राम बनाने की अनुमति देता है।



बैश स्क्रिप्टिंग में बग क्या हैं:

बैश स्क्रिप्टिंग या किसी अन्य प्रोग्रामिंग भाषा के साथ काम करते समय, आप कई त्रुटियों का सामना करते हैं। बग प्रोग्राम में एक त्रुटि या गलती है जो प्रोग्राम को गलत तरीके से व्यवहार करने का कारण बन सकता है।

बग खोजने के लिए प्रत्येक प्रोग्रामिंग भाषा की अपनी प्रक्रिया होती है; इसी तरह, टर्मिनल प्रोग्राम को डीबग करने के लिए बैश में भी कई बिल्ड-इन विकल्प हैं।

त्रुटियों को प्रबंधित करना और किसी प्रोग्राम को डिबग करना किसी परेशानी से कम नहीं है। यह एक समय लेने वाला काम है और यदि आप अपने प्रोग्राम को डीबग करने के लिए सही टूल से अवगत नहीं हैं तो यह खराब हो सकता है। यह राइट-अप आपकी स्क्रिप्ट को त्रुटि-मुक्त बनाने के लिए बैश-स्क्रिप्ट के डिबगिंग के बारे में एक संपूर्ण मार्गदर्शिका है। तो चलिए शुरू करते हैं:

बैश स्क्रिप्ट को कैसे डिबग करें:

जब आप बड़े प्रोग्रामिंग प्रोजेक्ट पर काम करते हैं, तो आप कई त्रुटियों या बग का सामना करते हैं। किसी प्रोग्राम को डिबग करना कभी-कभी जटिल हो सकता है। प्रोग्रामर आमतौर पर डिबगिंग टूल का उपयोग करते हैं, और कई कोड संपादक सिंटैक्स को हाइलाइट करके बग खोजने में भी सहायता करते हैं।

कोड को डीबग करने के लिए लिनक्स में विभिन्न उपकरण हैं, उदाहरण के लिए, जीएनयू डीबगर उर्फ ​​जीडीबी। जीडीबी जैसे उपकरण प्रोग्रामिंग भाषाओं के लिए सहायक होते हैं जो बायनेरिज़ में संकलित होते हैं। चूंकि बैश एक सरल व्याख्या की गई भाषा है, इसलिए इसे डिबग करने के लिए भारी उपकरणों की आवश्यकता नहीं है।

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

खैर, अभिकथन जोड़ना पुरानी पारंपरिक तकनीकों में से एक है। बैश स्क्रिप्ट को डीबग करने के लिए बैश में उपलब्ध झंडे/विकल्पों के सेट हैं। इन विकल्पों को स्क्रिप्ट में शेबैंग के साथ जोड़ा जा सकता है या टर्मिनल में प्रोग्राम निष्पादित करते समय जोड़ा जा सकता है। हम जिन विषयों को लेने जा रहे हैं, वे नीचे सूचीबद्ध हैं:

  1. सक्षम करके बैश स्क्रिप्ट को कैसे डिबग करें क्रिया -v विकल्प
  2. बैश स्क्रिप्ट का उपयोग करके कैसे डिबग करें एक्सट्रेस -एक्स विकल्प
  3. बैश स्क्रिप्ट का उपयोग करके कैसे डिबग करें नोएक्सेक -एन विकल्प
  4. कैसे पहचानें अनसेट चर बैश स्क्रिप्ट डीबग करते समय
  5. डिबग कैसे करें विशिष्ट भाग बैश स्क्रिप्ट के
  6. का उपयोग करके बैश स्क्रिप्ट को कैसे डिबग करें जाल आदेश
  7. समाप्त करके बैश स्क्रिप्ट को कैसे डिबग करें फ़ाइल ग्लोबिंग का उपयोग -एफ विकल्प
  8. हाउ तो जोड़ना शेल स्क्रिप्ट को डीबग करने के लिए डिबगिंग विकल्प
  9. हाउ तो पुनर्निर्देशित डिबग-रिपोर्ट एक फ़ाइल के लिए

तो आइए बैश स्क्रिप्ट को डीबग करने के लिए बैश में विभिन्न तकनीकों की जाँच करें:

1. वर्बोज़ -v विकल्प को सक्षम करके बैश स्क्रिप्ट को कैसे डिबग करें:

बैश स्क्रिप्ट को डीबग करने के सबसे आसान तरीकों में से एक का उपयोग कर रहा है -वी विकल्प, जिसे वर्बोज़ के रूप में भी जाना जाता है। विकल्प को शेबैंग के साथ जोड़ा जा सकता है या इसे निष्पादित करते समय स्पष्ट रूप से स्क्रिप्ट फ़ाइल नाम के साथ रखा जा सकता है। वर्बोज़ विकल्प कोड की प्रत्येक पंक्ति को दुभाषिया द्वारा प्रक्रिया के रूप में निष्पादित और प्रिंट करेगा। आइए इसे बैश स्क्रिप्ट उदाहरण से समझते हैं:

#! /बिन/बाश
फेंक दिया 'नंबर 1 दर्ज करें'
पढ़नासंख्या 1
फेंक दिया 'नंबर 2 दर्ज करें'
पढ़नानंबर 2
अगर [ '$नंबर1' -जीटी '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 से बड़ा है'
एलिफ [ '$नंबर1' -ईक्यू '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 के बराबर है'
अन्यथा
फेंक दिया 'नंबर 2 नंबर 1 से बड़ा है'
होना

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

$सुडोउपयुक्तइंस्टॉल मैं आया

बैश स्क्रिप्ट फ़ाइल का उपयोग करके बनाएं:

$मैं आयाb_script.sh

यदि आप विम संपादक के लिए नए हैं, तो मेरा सुझाव है कि आप सीखें विम संपादक का उपयोग कैसे करें आगे बढ़ने के पहले।

अब, स्क्रिप्ट पर वापस, स्क्रिप्ट का उपयोग करके निष्पादित करें -वी विकल्प:

$दे घुमा के -वीb_script.sh

यह उपरोक्त आउटपुट में देखा जा सकता है कि स्क्रिप्ट की प्रत्येक पंक्ति टर्मिनल में मुद्रित होती है क्योंकि वे दुभाषिया द्वारा संसाधित होते हैं। ध्यान दें कि स्क्रिप्ट उपयोगकर्ता से इनपुट लेना बंद कर देगी और फिर स्क्रिप्ट की अगली पंक्ति को संसाधित करेगी। जैसा कि ऊपर चर्चा की गई है कि -वी विकल्प को शेबैंग के बाद रखा जा सकता है जैसा कि निम्नलिखित में दिखाया गया है:

#! / बिन / बैश -v

इसी तरह, वर्बोज़ फ्लैग को शेबैंग की अगली पंक्ति में भी जोड़ा जा सकता है . सेट आदेश:

#! /बिन/बाश
सेट -वी

ऊपर चर्चा की गई कोई भी विधि वर्बोज़ को सक्षम कर सकती है।

2 xtrace -x विकल्प का उपयोग करके बैश स्क्रिप्ट को कैसे डिबग करें:

निष्पादन ट्रेस, जिसे xtrace के रूप में भी जाना जाता है, एक स्मार्ट और उपयोगी डिबगिंग विकल्प है, विशेष रूप से तार्किक त्रुटियों का पता लगाने के लिए। तार्किक त्रुटियां आमतौर पर चर और आदेशों से जुड़ी होती हैं। स्क्रिप्ट के निष्पादन के दौरान चर की स्थिति की जांच करने के लिए, हम उपयोग करते हैं -एक्स विकल्प। अब फिर से चलाएँ b_script.sh के साथ फाइल -एक्स झंडा:

$दे घुमा के -एक्सb_script.sh

निष्पादन प्रक्रिया के दौरान आउटपुट स्पष्ट रूप से प्रत्येक चर का मान दिखा रहा है। फिर से, -एक्स सेट कमांड का उपयोग करके शेबैंग के बगल में और शेबैंग लाइन के बाद इस्तेमाल किया जा सकता है। xtrace स्क्रिप्ट की प्रत्येक पंक्ति के साथ + चिह्न लगाता है।

3 noexec -n विकल्प का उपयोग करके बैश स्क्रिप्ट को कैसे डिबग करें:

सिंटैक्स त्रुटियां बग के प्राथमिक कारणों में से एक हैं। बैश स्क्रिप्ट को वाक्यात्मक रूप से डीबग करने के लिए, हम उपयोग करते हैं नोएक्सेक (कोई निष्पादन नहीं) मोड। नोएक्सेक मोड के लिए इस्तेमाल किया जाने वाला विकल्प है -एन। यह केवल कोड के सिंटैक्स त्रुटियों को निष्पादित करने के बजाय प्रदर्शित करेगा। कोड डीबग करने के लिए एक अधिक सुरक्षित तरीका। आइए अमल करें b_script.sh फिर से के साथ -एन विकल्प:

$दे घुमा के -एनb_script.sh

यदि कोई सिंटैक्स त्रुटि नहीं है, तो कोड का निष्पादन नहीं होगा। अब, हमारे कोड को संशोधित करें:

#! /बिन/बाश

फेंक दिया 'नंबर 1 दर्ज करें'
पढ़नासंख्या 1
फेंक दिया 'नंबर 2 दर्ज करें'
पढ़नानंबर 2
अगर [ '$नंबर1' -जीटी '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 से बड़ा है'
एलिफ [ '$नंबर1' -ईक्यू '$नंबर2' ]
#फिर
फेंक दिया 'नंबर 1 नंबर 2 के बराबर है'
अन्यथा
फेंक दिया 'नंबर 2 नंबर 1 से बड़ा है'
होना

मैं टिप्पणी कर रहा हूँ फिर उपरांत एलिफ . अब, -n निष्पादन के साथ b_script.sh स्क्रिप्ट:

$दे घुमा के -एनb_script.sh

जैसा कि अपेक्षित था, इसने स्पष्ट रूप से त्रुटि की पहचान की और इसे टर्मिनल में प्रदर्शित किया।

4 बैश स्क्रिप्ट को डिबग करते समय अनसेट वेरिएबल्स की पहचान कैसे करें:

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

#! /बिन/बाश
फेंक दिया 'नंबर 1 दर्ज करें'
पढ़नासंख्या 1
फेंक दिया 'नंबर 2 दर्ज करें'
पढ़नानंबर 2
अगर [ '$num1' -जीटी '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 से बड़ा है'
एलिफ [ '$नंबर1' -ईक्यू '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 के बराबर है'
अन्यथा
फेंक दिया 'नंबर 2 नंबर 1 से बड़ा है'
होना

पहली बार में अगर सशर्त बयान, मैंने नाम बदल दिया संख्या 1 चर से संख्या 1 . अभी संख्या 1 एक अस्थिर चर है। अब स्क्रिप्ट चलाएँ:

$दे घुमा के यूb_script.sh

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

5. बैश स्क्रिप्ट के विशिष्ट भाग को कैसे डिबग करें:

xtrace मोड कोड की हर लाइन को प्रोसेस करता है और आउटपुट देता है। हालांकि, एक बड़े कोड में त्रुटियों का पता लगाना समय लेने वाला होगा यदि हम पहले से ही जानते हैं कि कौन सा हिस्सा संभावित रूप से त्रुटि पैदा कर रहा है। सौभाग्य से, xtrace आपको कोड के एक विशिष्ट भाग को डीबग करने की अनुमति देता है, जिसे का उपयोग करके पूरा किया जा सकता है सेट आदेश। जगह सेट -x उस हिस्से की शुरुआत में जिसे डिबग करने की आवश्यकता है और फिर सेट +x अंत में। उदाहरण के लिए, मैं सशर्त बयानों को डीबग करना चाहता हूं b_script.sh , इसलिए मैं सभी सशर्त बयानों को संलग्न करूंगा सेट -x तथा सेट +x विकल्प जैसा कि नीचे दिए गए कोड में दिखाया गया है:

#! /बिन/बाश
फेंक दिया 'नंबर 1 दर्ज करें'
पढ़नासंख्या 1
फेंक दिया 'नंबर 2 दर्ज करें'
पढ़नानंबर 2
सेट -एक्स
अगर [ '$नंबर' -जीटी '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 से बड़ा है'
एलिफ [ '$नंबर1' -ईक्यू '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 के बराबर है'
अन्यथा
फेंक दिया 'नंबर 2 नंबर 1 से बड़ा है'
होना
सेट+ एक्स

अब, स्क्रिप्ट का उपयोग करके चलाएँ बैश b_script.sh .

आउटपुट केवल निर्दिष्ट शर्तों के अनुसार डिबगिंग कर रहा है।

6. ट्रैप कमांड का उपयोग करके बैश स्क्रिप्ट को कैसे डिबग करें:

यदि आपकी स्क्रिप्ट जटिल है, तो डिबगिंग के लिए और भी विस्तृत तकनीकें हैं। उनमें से एक है जाल आदेश। NS जाल कमांड संकेतों को पकड़ता है और एक विशिष्ट स्थिति होने पर एक कमांड निष्पादित करता है। आदेश एक संकेत या एक समारोह हो सकता है। मैंने के नाम से एक और स्क्रिप्ट बनाई है sum_script.sh :

#! /बिन/बाश
जाल 'इको' लाइन ${LINENO}: पहली संख्या $number1 है, दूसरी संख्या $number2 है और योग $sum है''डीबग
फेंक दिया 'पहला नंबर दर्ज करें'
पढ़नासंख्या 1
फेंक दिया 'दूसरा नंबर दर्ज करें'
पढ़नानंबर 2
योग= $[नंबर 1 + नंबर 2]
फेंक दिया 'योग है'$सम'

NS जाल कमांड के साथ डीबग संकेत चर की स्थिति प्रदर्शित करते हैं संख्या 1 , नंबर 2 तथा योग प्रत्येक पंक्ति के निष्पादन के बाद जैसा कि निम्न आउटपुट छवि में दिखाया गया है:

पीले ब्लॉक रिक्त स्थान हैं क्योंकि उपयोगकर्ता ने अभी तक कोई इनपुट दर्ज नहीं किया है; जैसे ही उपयोगकर्ता मान दर्ज करता है, ये रिक्त स्थान भर जाएंगे। यह विधि बैश स्क्रिप्ट को डीबग करने में भी काफी मददगार है।

7. -f विकल्प का उपयोग करके फ़ाइल ग्लोबिंग को हटाकर बैश स्क्रिप्ट को कैसे डिबग करें:

फ़ाइल ग्लोबिंग वाइल्डकार्ड वर्णों वाली फ़ाइलों को खोजने की एक प्रक्रिया है, अर्थात, * तथा ? . कई स्थितियों में, आपको डिबगिंग के दौरान फ़ाइलों का विस्तार करने की आवश्यकता नहीं होती है। ऐसे मामलों में, आप ग्लोबिंग फ़ाइल का उपयोग करके ब्लॉक कर सकते हैं -एफ विकल्प। आइए इसे एक स्क्रिप्ट से समझते हैं fglobe_script.sh :

#! /बिन/बाश
फेंक दिया 'सभी टेक्स्ट फ़ाइलें प्रदर्शित करें।'
रास *।टेक्स्ट

उपरोक्त कोड वर्तमान निर्देशिका में सभी पाठ फ़ाइलों को प्रदर्शित करेगा, निष्पादित करें:

$दे घुमा केfglobe_script.sh

फ़ाइल ग्लोबिंग को बंद करने के लिए, का उपयोग करें -एफ विकल्प:

$दे घुमा के -एफfglobe_script.sh

इसी तरह, आप इसे शेबैंग के साथ और के साथ उपयोग कर सकते हैं सेट साथ ही आदेश:

#! /बिन/बाश
फेंक दिया 'सभी टेक्स्ट फ़ाइलें प्रदर्शित करें।'
रास *।टेक्स्ट
सेट -एफ
फेंक दिया 'सभी टेक्स्ट फ़ाइलें प्रदर्शित करें'
रास *।टेक्स्ट
सेट+f

अब, भागो बैश fglobe_script.sh:

के साथ संलग्न भाग सेट-एफ/सेट + एफ विकल्प वाइल्डकार्ड वर्णों के साथ आदेशों को संसाधित नहीं करते थे।

8. डिबगिंग विकल्पों को डिबग शेल स्क्रिप्ट में कैसे संयोजित करें:

हम उपर्युक्त डिबगिंग तकनीकों में केवल एक विकल्प का उपयोग करते हैं, लेकिन हम बेहतर समझ के लिए विभिन्न विकल्पों को जोड़ सकते हैं। आइए अमल करें -एक्स तथा -वी के लिए विकल्प sum_script.sh लिपि। मैं का उपयोग कर रहा हूँ sum_script.sh लिपि।

#! /बिन/बाश
फेंक दिया 'पहला नंबर दर्ज करें'
पढ़नासंख्या 1
फेंक दिया 'दूसरा नंबर दर्ज करें'
पढ़नानंबर 2
योग= $[नंबर 1 + नंबर 2]
फेंक दिया 'योग है'$सम'

अब निष्पादित करें:

$दे घुमा के -xvsum_script.sh

दोनों -एक्स तथा -वी आउटपुट संयुक्त हैं, जैसा कि आउटपुट इमेज में दिखाया गया है। इसी तरह, हम भी जोड़ सकते हैं यू त्रुटि का पता लगाने के लिए वर्बोज़ -v के साथ विकल्प। मैं की जगह ले रहा हूँ संख्या 1 चर के साथ एक पर लिपि की छठी पंक्ति में:

#! /बिन/बाश
है$नंबर2तथायोगहै$सम''डीबग
फेंक दिया '
पहला नंबर दर्ज करें'
नंबर 1 पढ़ें
फेंक दिया '
दूसरा नंबर दर्ज करें'
नंबर 2 पढ़ें
योग = $ [संख्या + संख्या २]
फेंक दिया '
NSयोगहै$सम'

आउटपुट देखने के लिए, नीचे दी गई कमांड चलाएँ:

$दे घुमा के यूवीsum_script.sh

9. डिबग-रिपोर्ट को किसी फ़ाइल में रीडायरेक्ट कैसे करें:

किसी फ़ाइल में बैश स्क्रिप्ट की डीबग रिपोर्ट सहेजना कई स्थितियों में आसान हो सकता है। डिबग-रिपोर्ट को फ़ाइल में पुनर्निर्देशित करने के कारण यह थोड़ा मुश्किल है; हम कुछ विशेष चर का उपयोग करते हैं। आइए इसे लागू करें b_script.sh कोड:

#! /बिन/बाश
कार्यकारी 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ लाइननो--'
फेंक दिया 'नंबर 1 दर्ज करें'
पढ़नासंख्या 1
फेंक दिया 'नंबर 2 दर्ज करें'
पढ़नानंबर 2
अगर [ '$नंबर' -जीटी '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 से बड़ा है'
एलिफ [ '$नंबर1' -ईक्यू '$नंबर2' ]
फिर
फेंक दिया 'नंबर 1 नंबर 2 के बराबर है'
अन्यथा
फेंक दिया 'नंबर 2 नंबर 1 से बड़ा है'
होना

कोड की दूसरी पंक्ति में, यह देखा जा सकता है कि हम आउटपुट को a . पर रीडायरेक्ट कर रहे हैं डिबग_रिपोर्ट.लॉग फ़ाइल का उपयोग कर कार्यकारी फाइल डिस्क्रिप्टर 5 (FD5) के साथ कमांड।

निष्पादन 5> debug_report.log: NS कार्यकारी कमांड शेल में होने वाली हर चीज को फाइल में रीडायरेक्ट कर रहा है डिबग_रिपोर्ट.लॉग।

BASH_XTRACEFD=5: यह है एक विशेष बैश चर और किसी अन्य शेल में उपयोग नहीं किया जा सकता है। इसे एक वैध फ़ाइल डिस्क्रिप्टर असाइन करने की आवश्यकता है, और बैश निकाले गए आउटपुट को लिखेगा डिबग_रिपोर्ट.लॉग।

PS4='$LINENO– ': यह एक बैश वैरिएबल भी है जिसका उपयोग xtrace मोड का उपयोग करके डिबगिंग करते समय लाइन नंबर को प्रिंट करने के लिए किया जाता है। PS4 का डिफ़ॉल्ट मान है + संकेत

उपरोक्त स्क्रिप्ट एक लॉग फ़ाइल उत्पन्न कर रही है जिसे कहा जाता है डिबग_रिपोर्ट.लॉग, इसे पढ़ने के लिए उपयोग करें बिल्ली आदेश:

निष्कर्ष:

बग से भरा एक कोड प्रोग्राम के प्रदर्शन को प्रभावित कर सकता है और हार्डवेयर के लिए भी हानिकारक हो सकता है। डिबगिंग प्रत्येक प्रोग्राम के लिए बहुत महत्वपूर्ण है क्योंकि यह प्रोग्राम को अधिक कुशल बनाता है। किसी प्रोग्राम के विकास के दौरान मौजूदा और संभावित त्रुटियों का पता लगाना आपके प्रोग्राम को अप्रत्याशित रूप से व्यवहार करने से रोक सकता है। बड़े कोड को आमतौर पर सक्रिय डिबगिंग की आवश्यकता होती है, जो कोड के सहारा लेने वाले हिस्से को समाप्त करके कोड की प्रभावशीलता को बढ़ाता है।

कई प्रोग्रामिंग भाषाओं और परिवेशों के अपने साथी डिबगर होते हैं। बैश स्क्रिप्टिंग में, स्क्रिप्ट को डीबग करने के लिए विभिन्न तकनीकों को लागू किया जा सकता है। यह मार्गदर्शिका पूरी तरह से उन सभी विधियों पर केंद्रित है जिनका उपयोग बैश स्क्रिप्ट में बग खोजने के लिए किया जा सकता है। इसलिए जब भी आपको लगे कि आपकी बैश स्क्रिप्ट अपेक्षित व्यवहार नहीं कर रही है, तो ऊपर बताई गई किसी भी तकनीक का उपयोग करें, लेकिन ज्यादातर मामलों में xtrace मोड (-x) काफी मददगार होता है।