কিভাবে একটি ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন?

How Debug Bash Script




ভোক্তাদের কাছে পৌঁছানোর আগে যেকোনো প্রোগ্রাম ত্রুটিমুক্ত হওয়া প্রয়োজন। সফটওয়্যার ডেভেলপাররা সফটওয়্যার প্রোগ্রামগুলিকে বাগ-মুক্ত করার জন্য যথাসাধ্য চেষ্টা করে। কিন্তু যখন হাজার হাজার লাইন থাকে তখন কোড ত্রুটিহীন করা কঠিন। ডিবাগিং একটি চলমান প্রক্রিয়া; এটি অবিলম্বে ত্রুটি সনাক্ত করতে, কোড সম্পর্কে মূল্যবান তথ্য সংগ্রহ করতে এবং অপ্রয়োজনীয় কোডের অংশগুলি দূর করতে সহায়তা করে।

সমস্ত প্রোগ্রামিং ভাষার বাগ খুঁজে পেতে কিছু সাধারণ এবং কয়েকটি স্বতন্ত্র পন্থা রয়েছে। উদাহরণস্বরূপ, ডিবাগিং প্রোগ্রামগুলি ত্রুটিগুলি দ্রুত দূর করতে ব্যবহার করা যেতে পারে। যেখানে শেল স্ক্রিপ্টিং কোড ডিবাগ করার জন্য কোন বিশেষ সরঞ্জাম নেই। এই লেখাটি বিভিন্ন ডিবাগিং কৌশল নিয়ে আলোচনা করা যা ব্যাশ স্ক্রিপ্টকে ত্রুটিমুক্ত করতে ব্যবহার করা যেতে পারে। আমরা পদ্ধতিতে ডুব দেওয়ার আগে, আসুন শেল এবং শেল স্ক্রিপ্টিং সম্পর্কে প্রাথমিক ধারণা থাকি:







লিনাক্সে শেল কি?

যখন আপনি আপনার কম্পিউটার বুট করেন, কার্নেল সংযুক্ত হার্ডওয়্যার সম্পর্কে তথ্য পায় এবং অন্যান্য সংযুক্ত উপাদানগুলিকে ইন্টারঅ্যাক্ট করতে দেয়। এটি ছাড়াও, এটি মেমরি, সিপিইউ পরিচালনা করে এবং যে কোনও নতুন পেরিফেরালকে স্বীকৃতি দেয়। সর্বোপরি, কার্নেল যে কোনও অপারেটিং সিস্টেমের মেরুদণ্ড। কিন্তু আপনি কি কখনো ভেবেছেন কার্নেলের সাথে সরাসরি ইন্টারঅ্যাক্ট করতে পারেন, এটি একটি নির্দিষ্ট কাজ সম্পাদন করার নির্দেশ দেন? এটা করা কি এমনকি বাস্তব? একেবারে! একটি শেল, একটি ইন্টারেক্টিভ ইন্টারফেস সহ একটি কম্পিউটার প্রোগ্রামের সাহায্যে যে কেউ কার্নেলটি পরিচালনা করতে পারে। শেল মানুষকে কার্নেলের সাথে ইন্টারঅ্যাক্ট করতে দেয় এবং যেকোনো কাজ সম্পাদনের জন্য নির্দেশ দেয়।



ইউনিক্সে দুটি প্রধান শাঁস রয়েছে বোর্ন শেল এবং সি শেল । এই উভয় প্রকারেরই তাদের উপশ্রেণী রয়েছে। বোর্ন শেল বিভিন্ন ধরনের হয় কর্ন শেল (ksh), আলমকুইস্ট শেল (ছাই), বোর্ন আবার শেল (বাশ), এবং জেড শেল (zsh) । একই সময়ে, সি শেলের নিজস্ব উপশ্রেণী রয়েছে সি শেল (csh) এবং TENEX C শেল (tcsh) । উপরে উল্লিখিত হিসাবে, সমস্ত শাঁসের মধ্যে, বাশ (বোর্ন আবার শেল) এটি সর্বাধিক ব্যবহৃত শেল এবং এর দক্ষতা এবং ব্যবহারকারী-বন্ধুত্বের কারণে অনেক লিনাক্স বিতরণে বাক্স থেকে বেরিয়ে আসে।



ব্যাশ অনেক লিনাক্স ডিস্ট্রিবিউশনের ডিফল্ট শেল এবং লক্ষ লক্ষ লিনাক্স ব্যবহারকারীদের দ্বারা ব্যাপকভাবে ব্যবহৃত হয়। এটি এত বৈচিত্র্যময় এবং প্রভাবশালী যে এটি GUI- ভিত্তিক অ্যাপ্লিকেশনে আপনি সাধারণত সম্পাদন করা প্রতিটি কাজ সম্পাদন করতে পারে। আপনি ফাইল সম্পাদনা করতে পারেন, ফাইল পরিচালনা করতে পারেন, ফটো দেখতে পারেন, গান শুনতে পারেন, ভিডিও চালাতে পারেন এবং আরও অনেক কিছু করতে পারেন।





শেল স্ক্রিপ্ট কি?

যেহেতু আমরা শেলের মূল ধারণাটি শিখেছি, এখন শেল স্ক্রিপ্টিংয়ের দিকে এগিয়ে যাই। শেল স্ক্রিপ্ট একটি কম্পিউটার প্রোগ্রাম যা একটি শেলের একাধিক কমান্ড চালায় যা একটি নির্দিষ্ট ফাংশন সম্পাদনের জন্য দোভাষীর কাজ করে। উপরে যেভাবে আলোচনা করা হয়েছে, সেখানে 2 টি বিশেষ ধরনের শাঁস রয়েছে। যাইহোক, এই নির্দেশিকাটি বর্ন অ্যাগেইন শেল (ব্যাশ) এর দিকে মনোনিবেশ করছে।
তাহলে বাশ স্ক্রিপ্ট কি? লিনাক্সে, সমস্ত ব্যাশ কমান্ড সংরক্ষণ করা হয় /usr /bin এবং /bin ফোল্ডার উদাহরণস্বরূপ, যখনই আপনি একটি কমান্ড চালান, bash অনুসন্ধান করে যে এটি ডিরেক্টরিতে আছে কি না। কমান্ডটি কার্যকর করা হয় যদি এটি ডিরেক্টরিগুলিতে পাওয়া যায় অন্যথায় একটি ত্রুটি দেয়।

টার্মিনালে চালানোর জন্য একাধিক কমান্ডের প্রয়োজন এমন একটি কাজ সম্পাদন করার বিষয়ে কীভাবে? এই নির্দিষ্ট পরিস্থিতিতে, ব্যাশ স্ক্রিপ্টিং আপনাকে সাহায্য করতে পারে। ব্যাশ স্ক্রিপ্টিং হল শেল স্ক্রিপ্টিং এর একটি ফর্ম যা আপনাকে একটি নির্দিষ্ট কাজ করার জন্য একাধিক ব্যাশ কমান্ড চালানোর জন্য প্রোগ্রাম তৈরি করতে দেয়।



ব্যাশ স্ক্রিপ্টিংয়ে কী কী বাগ রয়েছে:

ব্যাশ স্ক্রিপ্টিং বা অন্য কোন প্রোগ্রামিং ভাষার সাথে কাজ করার সময়, আপনি অনেক ত্রুটির সম্মুখীন হন। একটি বাগ একটি ত্রুটি বা প্রোগ্রামের একটি ত্রুটি যা প্রোগ্রামটিকে ভুল আচরণ করতে পারে।

প্রতিটি প্রোগ্রামিং ভাষার বাগ খুঁজে বের করার নিজস্ব পদ্ধতি রয়েছে; অনুরূপভাবে, ব্যাশ-এর ​​একটি টার্মিনাল প্রোগ্রাম ডিবাগ করার জন্য অনেক বিল্ড-ইন অপশন রয়েছে।

ত্রুটিগুলি পরিচালনা করা এবং একটি প্রোগ্রাম ডিবাগ করা একটি ঝামেলার চেয়ে কম নয়। এটি একটি সময়সাপেক্ষ কাজ এবং যদি আপনি আপনার প্রোগ্রাম ডিবাগ করার জন্য সঠিক সরঞ্জাম সম্পর্কে সচেতন না হন তবে এটি আরও খারাপ হতে পারে। এই লেখাটি আপনার স্ক্রিপ্টকে ত্রুটিমুক্ত করতে ব্যাশ-স্ক্রিপ্টগুলির ডিবাগিং সম্পর্কে একটি সম্পূর্ণ নির্দেশিকা। তাহলে শুরু করা যাক:

ব্যাশ স্ক্রিপ্টটি কীভাবে ডিবাগ করবেন:

যখন আপনি বড় প্রোগ্রামিং প্রকল্পে কাজ করেন, তখন আপনি অনেক ত্রুটি বা বাগের সম্মুখীন হন। একটি প্রোগ্রাম ডিবাগ করা কখনও কখনও জটিল হতে পারে। প্রোগ্রামাররা সাধারণত ডিবাগিং টুল ব্যবহার করে এবং অনেক কোড এডিটর সিনট্যাক্স হাইলাইট করে বাগ খোঁজার ক্ষেত্রেও সহায়তা করে।

কোডগুলি ডিবাগ করার জন্য লিনাক্সে বিভিন্ন সরঞ্জাম রয়েছে, উদাহরণস্বরূপ, জিএনইউ ডিবাগার ওরফে জিডিবি। জিডিবির মতো সরঞ্জামগুলি প্রোগ্রামিং ভাষাগুলির জন্য সহায়ক যা বাইনারিগুলিতে সংকলিত হয়। যেহেতু ব্যাশ একটি সহজ ব্যাখ্যা করা ভাষা, তাই এটি ডিবাগ করার জন্য ভারী সরঞ্জামের প্রয়োজন নেই।

ব্যাশ স্ক্রিপ্টিং কোড ডিবাগ করার জন্য বিভিন্ন traditionalতিহ্যগত কৌশল রয়েছে এবং এর মধ্যে একটি যোগ করা হচ্ছে দাবী। নির্দিষ্ট শর্তগুলি যাচাই করার জন্য এবং সেই অনুযায়ী প্রোগ্রামটি চালানোর জন্য প্রোগ্রামগুলিতে যোগ করা হয় এমন শর্তাবলী। এটি একটি প্রতিরক্ষামূলক কৌশল যা বাগ খুঁজে পেতে এবং পরীক্ষায়ও সহায়তা করে। আপনি অনেক খুঁজে পেতে পারেন সরঞ্জাম যা ব্যাশ স্ক্রিপ্টগুলিতে দাবি যুক্ত করতে সহায়তা করে।

ঠিক আছে, যুক্তি যোগ করা পুরানো traditionalতিহ্যগত কৌশলগুলির মধ্যে একটি। একটি ব্যাশ স্ক্রিপ্ট ডিবাগ করার জন্য ব্যাশে পতাকার সেট/বিকল্প রয়েছে। এই বিকল্পগুলি স্ক্রিপ্টে শেবাং সহ যোগ করা যেতে পারে বা টার্মিনালে প্রোগ্রামটি চালানোর সময় যোগ করা যেতে পারে। আমরা যে বিষয়গুলি নিতে যাচ্ছি তা নীচে তালিকাভুক্ত করা হয়েছে:

  1. কিভাবে সক্ষম করে ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন verbose -v বিকল্প
  2. ব্যাশ স্ক্রিপ্ট ব্যবহার করে কীভাবে ডিবাগ করবেন xtrace -x বিকল্প
  3. ব্যাশ স্ক্রিপ্ট ব্যবহার করে কীভাবে ডিবাগ করবেন noexec -n বিকল্প
  4. কিভাবে সনাক্ত করা যায় ভেরিয়েবল আনসেট করুন ব্যাশ স্ক্রিপ্ট ডিবাগ করার সময়
  5. কিভাবে ডিবাগ করবেন নির্দিষ্ট অংশ বাশ স্ক্রিপ্টের
  6. কিভাবে একটি ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন ফাঁদ কমান্ড
  7. বাদ দিয়ে কিভাবে একটি ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন ফাইল গ্লোবিং ব্যবহার করে -ফ বিকল্প
  8. কিভাবে একত্রিত করা শেল স্ক্রিপ্ট ডিবাগ করার জন্য ডিবাগিং বিকল্প
  9. কিভাবে পুনugনির্দেশ ডিবাগ-রিপোর্ট একটি ফাইলে

সুতরাং আসুন একটি ব্যাশ স্ক্রিপ্ট ডিবাগ করার জন্য ব্যাশের বিভিন্ন কৌশল পরীক্ষা করি:

1. verbose -v অপশনটি সক্রিয় করে কিভাবে ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন:

ব্যাশ স্ক্রিপ্টটি ডিবাগ করার সবচেয়ে সহজ পন্থা হল -ভি বিকল্প, যা verbose নামেও পরিচিত। অপশনটি শেবাং এর সাথে যুক্ত করা যেতে পারে অথবা এটি কার্যকর করার সময় স্ক্রিপ্ট ফাইলের নাম স্পষ্টভাবে রাখা যেতে পারে। ভার্বোজ বিকল্পটি দোভাষীর দ্বারা প্রক্রিয়া হিসাবে কোডের প্রতিটি লাইন সম্পাদন এবং মুদ্রণ করবে। আসুন এটি একটি ব্যাশ স্ক্রিপ্ট উদাহরণ দিয়ে বুঝতে পারি:

#! /বিন/ব্যাশ
বের করে দিল 'নম্বর 1 লিখুন'
পড়ুন1 নম্বর
বের করে দিল 'নম্বর 2 লিখুন'
পড়ুন২ নম্বর
যদি [ '$ number1' -জিটি '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর চেয়ে বড়'
এলিফ [ '$ number1' -ইক '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর সমান'
অন্য
বের করে দিল 'সংখ্যা 2 সংখ্যা 1 এর চেয়ে বড়'
থাকা

উপরের কোডটি ব্যবহারকারীর কাছ থেকে দুটি নম্বর পাচ্ছে এবং তারপর কিছু শর্তসাপেক্ষ বিবৃতি দিচ্ছে যাতে সংখ্যাটি আরো উল্লেখযোগ্য, কম বা অন্য প্রবেশ করা সংখ্যার সমান কিনা তা পরীক্ষা করে। যদিও কোন টেক্সট এডিটর ব্যাশ স্ক্রিপ্টিং এর জন্য ব্যবহার করা যেতে পারে, আমি ভিম এডিটর ব্যবহার করছি। ভিম একটি শক্তিশালী, বৈশিষ্ট্য সমৃদ্ধ সম্পাদক যা ব্যাশ স্ক্রিপ্টের সিনট্যাক্সকে তুলে ধরে এবং সিনট্যাক্স ত্রুটির সম্ভাবনা হ্রাস করে। যদি আপনার ভিম এডিটর না থাকে, তাহলে নীচে উল্লিখিত কমান্ডটি চালানোর মাধ্যমে এটি পান:

$sudoউপযুক্তইনস্টল আমি এসেছিলাম

ব্যবহার করে একটি ব্যাশ স্ক্রিপ্ট ফাইল তৈরি করুন:

$আমি এসেছিলামb_script.sh

আপনি যদি ভিম এডিটরে নতুন হন, আমি আপনাকে শিখতে সুপারিশ করি কিভাবে ভিম এডিটর ব্যবহার করবেন অগ্রসর হওয়ার আগে.

এখন, স্ক্রিপ্টে ফিরে, ব্যবহার করে স্ক্রিপ্টটি চালান -ভি বিকল্প:

$বাশ -ভিb_script.sh

উপরের আউটপুটে দেখা যায় যে স্ক্রিপ্টের প্রতিটি লাইন টার্মিনালে মুদ্রিত হয় কারণ তারা দোভাষী দ্বারা প্রক্রিয়া করে। মনে রাখবেন যে স্ক্রিপ্টটি ব্যবহারকারীর কাছ থেকে ইনপুট নেওয়া বন্ধ করবে এবং তারপরে স্ক্রিপ্টের পরবর্তী লাইনটি প্রক্রিয়া করবে। উপরে আলোচনা করা হয়েছে যে -ভি বিকল্পটি শেবাংয়ের পরে নিম্নলিখিত হিসাবে দেখানো যেতে পারে:

#! / bin / bash -v

একইভাবে, ভার্বোজ পতাকাটি শেবাং এর পরবর্তী লাইনেও যুক্ত করা যেতে পারে সেট কমান্ড:

#! /বিন/ব্যাশ
সেট -ভি

উপরে আলোচিত যে কোন পদ্ধতি ভার্বোজকে সক্ষম করতে পারে।

2 কিভাবে xtrace -x অপশন ব্যবহার করে ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন:

এক্সিকিউশন ট্রেস, যা xtrace নামেও পরিচিত একটি স্মার্ট এবং দরকারী ডিবাগিং বিকল্প, বিশেষত লজিক্যাল ত্রুটিগুলি সনাক্ত করার জন্য। যৌক্তিক ত্রুটিগুলি সাধারণত ভেরিয়েবল এবং কমান্ডের সাথে যুক্ত থাকে। স্ক্রিপ্ট চালানোর সময় ভেরিয়েবলের অবস্থা পরীক্ষা করার জন্য, আমরা -এক্স বিকল্প এখন আবার, চালান b_script.sh সঙ্গে ফাইল -এক্স পতাকা:

$বাশ -এক্সb_script.sh

এক্সিকিউশন প্রক্রিয়ার সময় আউটপুট স্পষ্টভাবে প্রতিটি ভেরিয়েবলের মান দেখায়। আবার, -এক্স সেট কমান্ড ব্যবহার করে শেবাং এর পাশে এবং শেবাং লাইনের পরে ব্যবহার করা যেতে পারে। Xtrace স্ক্রিপ্টের প্রতিটি লাইনের সাথে + চিহ্ন রাখে।

3 কিভাবে noexec -n অপশন ব্যবহার করে ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন:

সিনট্যাক্স ত্রুটিগুলি বাগগুলির প্রাথমিক কারণগুলির মধ্যে একটি। ব্যাশ স্ক্রিপ্টকে সিনট্যাক্টিকভাবে ডিবাগ করার জন্য, আমরা ব্যবহার করি noexec (কোন এক্সিকিউশন) মোড। Noexec মোডের জন্য ব্যবহৃত বিকল্পটি হল -এন। এটি কেবল কোডটি চালানোর পরিবর্তে সিনট্যাক্স ত্রুটি প্রদর্শন করবে। কোড ডিবাগ করার জন্য অনেক নিরাপদ পদ্ধতি। চালানো যাক b_script.sh সঙ্গে আবার -এন বিকল্প:

$বাশ -এনb_script.sh

কোন সিনট্যাক্স ত্রুটি না থাকলে কোডের কোন এক্সিকিউশন হবে না। এখন, আমাদের কোড পরিবর্তন করা যাক:

#! /বিন/ব্যাশ

বের করে দিল 'নম্বর 1 লিখুন'
পড়ুন1 নম্বর
বের করে দিল 'নম্বর 2 লিখুন'
পড়ুন২ নম্বর
যদি [ '$ number1' -জিটি '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর চেয়ে বড়'
এলিফ [ '$ number1' -ইক '$ number2' ]
#তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর সমান'
অন্য
বের করে দিল 'সংখ্যা 2 সংখ্যা 1 এর চেয়ে বড়'
থাকা

আমি মন্তব্য করছি তারপর পরে এলিফ । এখন, -n এক্সিকিউট দিয়ে b_script.sh লিপি:

$বাশ -এনb_script.sh

প্রত্যাশিত হিসাবে, এটি স্পষ্টভাবে ত্রুটি চিহ্নিত করেছে এবং এটি টার্মিনালে প্রদর্শন করেছে।

4 ব্যাশ স্ক্রিপ্ট ডিবাগ করার সময় কীভাবে আনসেট ভেরিয়েবলগুলি সনাক্ত করবেন:

একটি কোড লেখার সময় একটি টাইপো করা সাধারণ। প্রায়শই, আপনি একটি ভেরিয়েবল ভুল টাইপ করেন, যা কোডটি কার্যকর করতে দেয় না। এই ধরনের ত্রুটি চিহ্নিত করার জন্য, আমরা -উ বিকল্প আসুন কোডটি আবার পরিবর্তন করি:

#! /বিন/ব্যাশ
বের করে দিল 'নম্বর 1 লিখুন'
পড়ুন1 নম্বর
বের করে দিল 'নম্বর 2 লিখুন'
পড়ুন২ নম্বর
যদি [ '$ num1' -জিটি '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর চেয়ে বড়'
এলিফ [ '$ number1' -ইক '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর সমান'
অন্য
বের করে দিল 'সংখ্যা 2 সংখ্যা 1 এর চেয়ে বড়'
থাকা

প্রথমে যদি শর্তসাপেক্ষ বিবৃতি, আমি নাম পরিবর্তন করেছি 1 নম্বর পরিবর্তনশীল সংখ্যা 1 । এখন সংখ্যা 1 একটি আনসেট ভেরিয়েবল। এখন স্ক্রিপ্ট চালান:

$বাশ -উb_script.sh

আউটপুট চিহ্নিত করা হয়েছে এবং স্পষ্টভাবে একটি আনসেট ভেরিয়েবলের নাম প্রদর্শন করে।

5. ব্যাশ স্ক্রিপ্টের নির্দিষ্ট অংশটি কীভাবে ডিবাগ করবেন:

Xtrace মোড কোডের প্রতিটি লাইন প্রসেস করে এবং আউটপুট দেয়। যাইহোক, একটি বড় কোডে ত্রুটি খুঁজে পাওয়া সময়সাপেক্ষ হবে যদি আমরা ইতিমধ্যে জানি যে কোন অংশটি সম্ভাব্য ত্রুটি সৃষ্টি করছে। ভাগ্যক্রমে, xtrace আপনাকে কোডের একটি নির্দিষ্ট অংশ ডিবাগ করার অনুমতি দেয়, যা ব্যবহার করে সম্পন্ন করা যেতে পারে সেট কমান্ড স্থান সেট -x যে অংশটি ডিবাগ করা দরকার তার শুরুতে এবং তারপর সেট +এক্স শেষে. উদাহরণস্বরূপ, আমি শর্তাধীন বিবৃতি ডিবাগ করতে চাই b_script.sh , তাই আমি সব শর্তসাপেক্ষ বিবৃতি সংযুক্ত করব সেট -x এবং সেট +এক্স নীচের কোডে দেখানো বিকল্পগুলি:

#! /বিন/ব্যাশ
বের করে দিল 'নম্বর 1 লিখুন'
পড়ুন1 নম্বর
বের করে দিল 'নম্বর 2 লিখুন'
পড়ুন২ নম্বর
সেট -এক্স
যদি [ '$ সংখ্যা' -জিটি '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর চেয়ে বড়'
এলিফ [ '$ number1' -ইক '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর সমান'
অন্য
বের করে দিল 'সংখ্যা 2 সংখ্যা 1 এর চেয়ে বড়'
থাকা
সেট+ এক্স

এখন, স্ক্রিপ্ট ব্যবহার করে চালান bash b_script.sh

আউটপুট শুধুমাত্র ডিবাগ করছে যদি শর্তাবলী নির্দিষ্ট করে।

6. কিভাবে ফাঁদ কমান্ড ব্যবহার করে একটি ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন:

যদি আপনার স্ক্রিপ্টটি জটিল হয়, তবে ডিবাগিংয়ের জন্য আরও বিস্তৃত কৌশল রয়েছে। তাদের মধ্যে একটি হল ফাঁদ কমান্ড দ্য ফাঁদ কমান্ড সিগন্যাল ধরতে পারে এবং একটি সুনির্দিষ্ট পরিস্থিতি দেখা দিলে কমান্ড চালায়। কমান্ড একটি সংকেত বা একটি ফাংশন হতে পারে। আমি এর নামে আরেকটি স্ক্রিপ্ট তৈরি করেছি sum_script.sh :

#! /বিন/ব্যাশ
ফাঁদ 'ইকো' লাইন $ {LINENO}: প্রথম সংখ্যা হল $ number1, দ্বিতীয় সংখ্যা হল $ number2 এবং যোগফল হল $ sum ''ডিবাগ
বের করে দিল 'প্রথম নম্বর লিখুন'
পড়ুন1 নম্বর
বের করে দিল 'দ্বিতীয় নম্বর লিখুন'
পড়ুন২ নম্বর
যোগফল= $[সংখ্যা 1 + সংখ্যা 2]
বের করে দিল 'যোগফল হল$ যোগফল'

দ্য ফাঁদ সঙ্গে কমান্ড ডিবাগ সংকেত ভেরিয়েবলের অবস্থা প্রদর্শন করে 1 নম্বর , ২ নম্বর এবং যোগফল নিম্নোক্ত আউটপুট ইমেজে দেখানো প্রতিটি লাইন কার্যকর করার পর:

হলুদ ব্লকগুলি ফাঁকা স্থান কারণ ব্যবহারকারী এখনও কোন ইনপুট প্রবেশ করেনি; ব্যবহারকারী মান প্রবেশ করলে এই স্থানগুলি পূরণ হবে। এই পদ্ধতিটি ব্যাশ স্ক্রিপ্টগুলি ডিবাগ করার ক্ষেত্রেও বেশ সহায়ক।

7. -f বিকল্পটি ব্যবহার করে ফাইল গ্লোবিং বাদ দিয়ে কীভাবে একটি ব্যাশ স্ক্রিপ্ট ডিবাগ করবেন:

ফাইল গ্লোবিং হল ওয়াইল্ডকার্ড অক্ষরের সাথে ফাইল খুঁজে বের করার একটি প্রক্রিয়া, যেমন, * এবং ? । অনেক পরিস্থিতিতে, ডিবাগ করার সময় আপনার ফাইলগুলি প্রসারিত করার দরকার নেই। এই ধরনের ক্ষেত্রে, আপনি ফাইল ব্যবহার করে গ্লোবিং ব্লক করতে পারেন -ফ বিকল্প আসুন এটি একটি স্ক্রিপ্ট দিয়ে বুঝতে পারি fglobe_script.sh :

#! /বিন/ব্যাশ
বের করে দিল 'সব টেক্সট ফাইল প্রদর্শন করুন।'
ls *.txt

উপরের কোডটি বর্তমান ডিরেক্টরিতে সমস্ত পাঠ্য ফাইল প্রদর্শন করবে, চালান:

$বাশfglobe_script.sh

ফাইল গ্লোবিং বন্ধ করতে, ব্যবহার করুন -ফ বিকল্প:

$বাশ -ফfglobe_script.sh

একইভাবে, আপনি এটি শেবাং এবং এর সাথে ব্যবহার করতে পারেন সেট পাশাপাশি কমান্ড:

#! /বিন/ব্যাশ
বের করে দিল 'সব টেক্সট ফাইল প্রদর্শন করুন।'
ls *.txt
সেট -ফ
বের করে দিল 'সব টেক্সট ফাইল প্রদর্শন করুন'
ls *.txt
সেট+চ

এখন, চালান bash fglobe_script.sh:

সঙ্গে ঘেরা অংশ set -f/set +f বিকল্পগুলি ওয়াইল্ডকার্ড অক্ষরের সাথে কমান্ডগুলি প্রক্রিয়া করে না।

8. শেল স্ক্রিপ্ট ডিবাগ করার জন্য ডিবাগিং বিকল্পগুলি কীভাবে একত্রিত করবেন:

আমরা উপরে উল্লিখিত ডিবাগিং কৌশলগুলিতে কেবল একটি বিকল্প ব্যবহার করি, তবে আমরা আরও ভাল বোঝার জন্য বিভিন্ন বিকল্প একত্রিত করতে পারি। বাস্তবায়ন করা যাক -এক্স এবং -ভি বিকল্প sum_script.sh লিপি. আমি ব্যবহার করছি sum_script.sh লিপি.

#! /বিন/ব্যাশ
বের করে দিল 'প্রথম নম্বর লিখুন'
পড়ুন1 নম্বর
বের করে দিল 'দ্বিতীয় নম্বর লিখুন'
পড়ুন২ নম্বর
যোগফল= $[সংখ্যা 1 + সংখ্যা 2]
বের করে দিল 'যোগফল হল$ যোগফল'

এখন চালান:

$বাশ -এক্সভিsum_script.sh

দুটোই -এক্স এবং -ভি আউটপুট মিলিত হয়, যেমন আউটপুট ছবিতে প্রদর্শিত হয়। একইভাবে, আমরাও একত্রিত করতে পারি -উ ত্রুটি সনাক্তকরণের জন্য verbose -v সহ বিকল্প। আমি প্রতিস্থাপন করছি 1 নম্বর সঙ্গে পরিবর্তনশীল একের উপর স্ক্রিপ্টের ষষ্ঠ লাইনে:

#! /বিন/ব্যাশ
হয়$ number2এবংযোগফলহয়$ যোগফল'' ডিবাগ
বের করে দিল '
প্রথম সংখ্যা লিখুন'
সংখ্যা 1 পড়ুন
বের করে দিল '
দ্বিতীয় সংখ্যা লিখুন'
সংখ্যা 2 পড়ুন
যোগফল = $ [num + number2]
বের করে দিল '
দ্যযোগফলহয়$ যোগফল'

আউটপুট দেখতে, নীচে উল্লিখিত কমান্ডটি চালান:

$বাশ -উভিsum_script.sh

9. কিভাবে একটি ফাইল ডিবাগ রিপোর্ট পুনirectনির্দেশিত:

একটি ব্যাশ স্ক্রিপ্টের একটি ডিবাগ রিপোর্ট একটি ফাইলে সংরক্ষণ করা অনেক পরিস্থিতিতে সহজ হতে পারে। এটি একটি বিট চতুর কারণ একটি ফাইল ডিবাগ-রিপোর্ট পুন redনির্দেশিত করার জন্য; আমরা কিছু বিশেষ ভেরিয়েবল ব্যবহার করি। আসুন এটি বাস্তবায়ন করি b_script.sh কোড:

#! /বিন/ব্যাশ
এক্সিকিউট 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
বের করে দিল 'নম্বর 1 লিখুন'
পড়ুন1 নম্বর
বের করে দিল 'নম্বর 2 লিখুন'
পড়ুন২ নম্বর
যদি [ '$ সংখ্যা' -জিটি '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর চেয়ে বড়'
এলিফ [ '$ number1' -ইক '$ number2' ]
তারপর
বের করে দিল 'সংখ্যা 1 সংখ্যা 2 এর সমান'
অন্য
বের করে দিল 'সংখ্যা 2 সংখ্যা 1 এর চেয়ে বড়'
থাকা

কোডের দ্বিতীয় লাইনে, দেখা যায় যে আমরা আউটপুটকে a তে পুন redনির্দেশিত করছি debug_report.log ফাইল ব্যবহার করে এক্সিকিউট ফাইল বর্ণনাকারী 5 (FD5) সহ কমান্ড।

exec 5> debug_report.log: দ্য এক্সিকিউট কমান্ড শেলের মধ্যে ঘটে যাওয়া সবকিছুকে একটি ফাইলে পুন redনির্দেশিত করছে debug_report.log।

BASH_XTRACEFD = 5: এটা বিশেষ bash পরিবর্তনশীল এবং অন্য কোন শেল ব্যবহার করা যাবে না। এটি একটি বৈধ ফাইল বর্ণনাকারী বরাদ্দ করা প্রয়োজন, এবং bash নিষ্কাশিত আউটপুট লিখবে debug_report.log।

PS4 = '$ LINENO– ': এটি একটি ব্যাশ ভেরিয়েবল যা xtrace মোড ব্যবহার করে ডিবাগ করার সময় লাইন নম্বর মুদ্রণ করতে ব্যবহৃত হয়। PS4 এর ডিফল্ট মান হল + চিহ্ন

উপরের স্ক্রিপ্ট নামক একটি লগ ফাইল তৈরি করছে debug_report.log, এটি পড়তে, ব্যবহার করুন বিড়াল কমান্ড:

উপসংহার:

বাগ দ্বারা পূর্ণ একটি কোড প্রোগ্রামের কর্মক্ষমতাকে প্রভাবিত করতে পারে এবং হার্ডওয়্যারের জন্যও ক্ষতিকর। ডিবাগিং প্রতিটি প্রোগ্রামের জন্য অত্যন্ত গুরুত্বপূর্ণ কারণ এটি প্রোগ্রামটিকে আরও দক্ষ করে তোলে। একটি প্রোগ্রামের বিকাশের সময় বিদ্যমান এবং সম্ভাব্য ত্রুটিগুলি সন্ধান করা আপনার প্রোগ্রামটিকে অপ্রত্যাশিতভাবে আচরণ করা থেকে বিরত রাখতে পারে। বড় কোডগুলিতে সাধারণত সক্রিয় ডিবাগিংয়ের প্রয়োজন হয়, কোডের রিসোর্স গ্রহণকারী অংশগুলি বাদ দিয়ে কোডের কার্যকারিতা বাড়ায়।

অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ এবং পরিবেশের নিজস্ব সঙ্গী ডিবাগার রয়েছে। ব্যাশ স্ক্রিপ্টিং -এ, স্ক্রিপ্ট ডিবাগ করার জন্য বিভিন্ন কৌশল প্রয়োগ করা যেতে পারে। এই নির্দেশিকাটি ব্যাশ স্ক্রিপ্টগুলিতে বাগ খুঁজে পেতে যে সমস্ত পদ্ধতি ব্যবহার করা যেতে পারে তার উপর পুরোপুরি মনোনিবেশ করেছে। তাই যখনই আপনি মনে করেন যে আপনার ব্যাশ স্ক্রিপ্ট প্রত্যাশিতভাবে আচরণ করছে না, উপরে উল্লিখিত যে কোনও কৌশল ব্যবহার করুন, তবে xtrace মোড (-x) বেশিরভাগ ক্ষেত্রে বেশ সহায়ক।