একটি স্ক্রিপ্ট হচ্ছে একটি ফাইলে সংরক্ষিত কমান্ডের একটি লিস্ট। সবসময় টার্মিনালে একে একে টাইপ করে কমান্ডের একটি সিকোয়েন্স চালানোর বদলে, একজন সিস্টেম ব্যবহারকারী সেগুলো (কমান্ডগুলো) একটি ফাইলে সংরক্ষণ করতে পারে এবং ফাইলটি বারবার ইনভোক করে কমান্ডগুলো একাধিকবার রি-এক্সিকিউট করতে পারে।
স্ক্রিপ্টিং শেখার সময় বা স্ক্রিপ্ট লেখার প্রাথমিক পর্যায়ে, আমরা সাধারণত ছোট বা সংক্ষিপ্ত স্ক্রিপ্ট লিখতে শুরু করি কয়েক লাইন কমান্ডের সাথে। এবং আমরা সাধারণত সেসে ডিবাগ করি তাদের আউটপুট দেখে এবং নিশ্চিত করে যে সেগুলো আমাদের অভিপ্রায়মত কাজ করছে।
তবে, যতক্ষণ আমরা খুব বড় এবং উন্নত স্ক্রিপ্ট লিখতে শুরু করি হাজার হাজার লাইন কমান্ডের সাথে, উদাহরণস্বরূপ স্ক্রিপ্ট যেগুলো সিস্টেম সেটিংস মডিফাই করে, নেটওয়ার্ক ওভার ক্রিটিক্যাল ব্যাকআপ পারফর্ম করে এবং আরও অনেক কিছু, ততক্ষণ আমরা বুঝতে পারি যে শুধু একটি স্ক্রিপ্টের আউটপুট দেখে তা একটি স্ক্রিপ্টের ভিতরে বাগ খুঁজে বের করার জন্য পর্যাপ্ত নয়।
অতএব, এই লিনাক্সে শেল স্ক্রিপ্ট ডিবাগিং সিরিজে, আমরা শেল স্ক্রিপ্ট ডিবাগিং কীভাবে সক্ষম করতে হয়, তারপর বিভিন্ন শেল স্ক্রিপ্ট ডিবাগিং মোড এবং পরবর্তী সিরিজে সেগুলো কীভাবে ব্যবহার করতে হয় তা ওয়ক-থ্রু করব।
একটি স্ক্রিপ্ট কীভাবে শুরু করবেন
একটি স্ক্রিপ্ট অন্যান্য ফাইল থেকে এর প্রথম লাইন দ্বারা আলাদা হয়, যেটি একটি #! (She-bang – ফাইল টাইপ ডিফাইন করে) এবং একটি পথের নাম (ইন্টারপ্রেটারের পথ) ধারণ করে যা সিস্টেমকে জানায় যে ফাইলটি কমান্ডের একটি সংকলন যেটি নির্দিষ্ট প্রোগ্রাম (ইন্টারপ্রেটার) দ্বারা ইন্টারপ্রেট করা হবে।
বিভিন্ন ধরনের স্ক্রিপ্টের "প্রথম লাইন" এর উদাহরণ নিচে:
#!/bin/sh [sh স্ক্রিপ্টিং-এর জন্য] #!/bin/bash [bash স্ক্রিপ্টিং-এর জন্য] #!/usr/bin/perl [perl প্রোগ্রামিং-এর জন্য] #!/bin/awk -f [awk স্ক্রিপ্টিং-এর জন্য]
নোট: প্রথম লাইন বা #! বাদ দেয়া যাবে যদি একটি স্ক্রিপ্ট শুধু স্ট্যান্ডার্ড সিস্টেম কমান্ডের সেট ধারণ করে, কোনো ইন্টারনাল শেল ডিরেক্টিভ ছাড়া।
লিনাক্সে শেল স্ক্রিপ্ট কীভাবে এক্সিকিউট করবেন
একটি শেল স্ক্রিপ্ট ইনভোক করার কনভেনশনাল সিনট্যাক্স হলো:
$ script_name argument1 ... argumentN
আরেকটি সম্ভাব্য ফর্ম হলো স্পষ্টভাবে শেলটি স্পেসিফাই করে যেটি স্ক্রিপ্টটি এক্সিকিউট করবে:
$ shell script_name argument1 ... argumentN
উদাহরণস্বরূপ:
$ /bin/bash script_name argument1 ... argumentN [bash স্ক্রিপ্টিং-এর জন্য] $ /bin/ksh script_name argument1 ... argumentN [ksh স্ক্রিপ্টিং-এর জন্য] $ /bin/sh script_name argument1 ... argumentN [sh স্ক্রিপ্টিং-এর জন্য]
যে স্ক্রিপ্টগুলোর প্রথম লাইন হিসেবে #! নেই এবং শুধু বেসিক সিস্টেম কমান্ড ধারণ করে যেন নিচেরটির মত:
#script containing standard system commands cd /home/$USER mkdir tmp echo "tmp directory created under /home/$USER"
সহজে এক্সিকিউটেবল করুন এবং নিচের মত করে রান করুন:
$ chmod +x script_name $ ./script_name
শেল স্ক্রিপ্ট ডিবাগিং মোড সক্ষম করার পদ্ধতিগুলো
প্রাথমিক শেল স্ক্রিপ্ট ডিবাগিং অপশনগুলো নিচে:
-v(verbose-এর সংক্ষিপ্ত) – শেলকে স্ক্রিপ্টের সব লাইন দেখাতে বলে যতক্ষণ সেগুলো পড়া হয়, এটি ভার্বোজ মোড সক্রিয় করে।-n(noexec বা no execution-এর সংক্ষিপ্ত) – শেলকে সব কমান্ড পড়তে বলে, কিন্তু এক্সিকিউট করে না। এই অপশন সিনট্যাক্স চেকিং মোড সক্রিয় করে।-x(xtrace বা execution trace-এর সংক্ষিপ্ত) – শেলকে সব কমান্ড এবং তাদের আর্গুমেন্ট টার্মিনালে ডিসপ্লে করতে বলে যতক্ষণ সেগুলো এক্সিকিউট হয়। এই অপশন শেল ট্রেসিং মোড সক্ষম করে।
১. শেল স্ক্রিপ্টের প্রথম লাইন মডিফাই করা
প্রথম মেকানিজম হলো শেল স্ক্রিপ্টের প্রথম লাইন পরিবর্তন করে নিচের মত, যা পুরো স্ক্রিপ্টের ডিবাগিং সক্রিয় করবে।
#!/bin/sh option(s)
উপরের ফর্মে, option হতে পারে ডিবাগিং অপশনগুলোর এক বা কম্বিনেশন।
২. ডিবাগিং অপশন সহ শেল ইনভোক করা
দ্বিতীয় হলো ডিবাগিং অপশন সহ শেল ইনভোক করা নিচের মত, এই মেথডও পুরো স্ক্রিপ্টের ডিবাগিং অন করবে।
$ shell option(s) script_name argument1 ... argumentN
উদাহরণস্বরূপ:
$ /bin/bash option(s) script_name argument1 ... argumentN
৩. set শেল বিল্ট-ইন কমান্ড ব্যবহার করা
তৃতীয় মেথড হলো set বিল্ট-ইন কমান্ড ব্যবহার করে একটি শেল স্ক্রিপ্টের নির্দিষ্ট অংশ ডিবাগ করা যেন একটি ফাংশন। এই মেকানিজম গুরুত্বপূর্ণ, কারণ এটি আমাদের একটি শেল স্ক্রিপ্টের যেকোনো সেগমেন্টে ডিবাগিং সক্রিয় করতে দেয়।
আমরা set কমান্ড ব্যবহার করে নিচের ফর্মে ডিবাগিং মোড অন করতে পারি, যেখানে option ডিবাগিং অপশনগুলোর যেকোনো একটি।
$ set option
ডিবাগিং মোড অন করতে, ব্যবহার করুন:
$ set -option
ডিবাগিং মোড অফ করতে, ব্যবহার করুন:
$ set +option
অতিরিক্তভাবে, যদি আমরা একটি শেল স্ক্রিপ্টের বিভিন্ন সেগমেন্টে একাধিক ডিবাগিং মোড সক্রিয় করি, আমরা সেগুলো একসাথে ডিজেবল করতে পারি নিচের মত:
$ set -
শেল স্ক্রিপ্ট ডিবাগিং মোড সক্ষম করার বিষয়ে আজ এপর্যন্ত। যেমন আমরা দেখেছি, আমরা হয় পুরো শেল স্ক্রিপ্ট ডিবাগ করতে পারি বা স্ক্রিপ্টের নির্দিষ্ট একটি অংশ।
এই সিরিজের পরবর্তী দুটি এপিসোডে, আমরা কভার করব শেল স্ক্রিপ্ট ডিবাগিং অপশনগুলো কীভাবে ব্যবহার করতে হয় ভার্বোজ এক্সপ্লেইন, সিনট্যাক্স চেকিং এবং শেল ট্রেসিং ডিবাগিং মোড উদাহরণসহ।
গুরুত্বপূর্ণ, এই গাইড সম্পর্কে যেকোনো প্রশ্ন জিজ্ঞেস করতে বা আমাদের ফিডব্যাক দিতে ভুলবেন না নিচের কমেন্ট সেকশন ব্যবহার করে। 그때 পর্যন্ত, Tecmint-এর সাথে কানেক্টেড থাকুন।