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