আমরা শেল স্ক্রিপ্ট ডিবাগিং সিরিজ শুরু করেছি বিভিন্ন ডিবাগিং বিকল্প ব্যাখ্যা করে এবং শেল স্ক্রিপ্ট ডিবাগিং মোডগুলি কীভাবে সক্ষম করা যায়।
আপনার শেল স্ক্রিপ্টগুলি লেখার পরে, এটি বাঞ্ছনীয় যে আমরা স্ক্রিপ্টগুলি চালানোর আগে কার্যত সিনট্যাক্স পরীক্ষা করি, তারা সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য তাদের আউটপুট দেখার বিপরীতে৷
সিরিজের এই অংশে, আমরা কীভাবে সিনট্যাক্স চেকিং ডিবাগিং মোড ব্যবহার করব তা দেখব। মনে রাখবেন আমরা এই সিরিজের প্রথম অংশে বিভিন্ন ডিবাগিং অপশন ব্যাখ্যা করেছি এবং এখানে, আমরা সেগুলিকে স্ক্রিপ্ট ডিবাগিং করতে ব্যবহার করব।
ভার্বোস ডিবাগিং মোড সক্রিয় করা হচ্ছে
এই গাইডের প্রাথমিক ফোকাসে যাওয়ার আগে, আসুন সংক্ষিপ্তভাবে ভার্বোস মোড অন্বেষণ করি . এটি -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 নেই কীওয়ার্ড শব্দ। এবং শেলটি ফাইলের শেষ পর্যন্ত এটি সন্ধান করেছিল এবং একবার এটি খুঁজে পায়নি (সম্পন্ন ), শেল একটি সিনট্যাক্স ত্রুটি প্রিন্ট করেছে:
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
সংক্ষেপে, আমাদের সর্বদা নিশ্চিত করা উচিত যে আমরা আমাদের শেল স্ক্রিপ্টগুলি কার্যকর করার আগে কোনও ত্রুটি ক্যাপচার করতে সিনট্যাকটিকভাবে পরীক্ষা করি৷
এই নির্দেশিকা সম্পর্কে আমাদের কোন প্রশ্ন বা প্রতিক্রিয়া পাঠাতে, নীচের প্রতিক্রিয়া ফর্ম ব্যবহার করুন. এই সিরিজের তৃতীয় অংশে, আমরা শেল ট্রেসিং ডিবাগিং মোড ব্যাখ্যা এবং ব্যবহার করব৷