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