লিনাক্সে, প্রসেস অটোমেশন শেল স্ক্রিপ্টিং-এর ওপর ব্যাপকভাবে নির্ভর করে। এতে একটি ফাইল তৈরি করা জড়িত যাতে কমান্ডের একটি সিকোয়েন্স থাকে যেগুলো একসাথে এক্সিকিউট করা যায়।
এই আর্টিকেলে, আমরা Bash স্ক্রিপ্টিং-এর বেসিক দিয়ে শুরু করব যাতে ভেরিয়েবল, কমান্ড, ইনপুট/আউটপুট, এবং ডিবাগিং থাকে। আমরা পথে পথে প্রতিটি উদাহরণও দেখব।
চলুন শুরু করা যাক। 🚀
টেবল অফ কন্টেন্টস
- প্রি-রেকুইজিটস
- ভূমিকা
- Bash স্ক্রিপ্টিং-এর সংজ্ঞা
- Bash স্ক্রিপ্টিং-এর সুবিধা
- Bash শেল এবং কমান্ড লাইন ইন্টারফেসের ওভারভিউ
- Bash স্ক্রিপ্টিং-এ কীভাবে শুরু করবেন
- কমান্ড লাইন থেকে Bash কমান্ড কীভাবে রান করবেন
- Bash স্ক্রিপ্ট কীভাবে তৈরি ও এক্সিকিউট করবেন
Bash স্ক্রিপ্টিং বেসিক
Bash স্ক্রিপ্টিং-এ কমেন্ট
- Bash-এ ভেরিয়েবল এবং ডেটা টাইপ
- Bash স্ক্রিপ্টে ইনপুট এবং আউটপুট
- বেসিক Bash কমান্ড (echo, read, ইত্যাদি)
কন্ডিশনাল স্টেটমেন্ট (if/else)
Bash-এ লুপিং এবং ব্রাঞ্চিং
- While লুপ
- For লুপ
- কেস স্টেটমেন্ট
- cron ব্যবহার করে স্ক্রিপ্ট শিডিউল করার পদ্ধতি
- Bash স্ক্রিপ্ট ডিবাগ এবং ট্রাবলশুট করার পদ্ধতি
- উপসংহার
- Bash স্ক্রিপ্টিং সম্পর্কে আরও শিখনের রিসোর্স
প্রি-রেকুইজিটস
এই টিউটোরিয়াল ফলো করার জন্য, আপনার নিচের এক্সেস থাকা উচিত:
- কমান্ড লাইন এক্সেস সহ একটি রানিং লিনাক্স ভার্সন।
আপনার যদি লিনাক্স ইনস্টল না থাকে বা আপনি শুধু শুরু করছেন, তবে আপনি সহজে Replit-এর মাধ্যমে লিনাক্স কমান্ড লাইন এক্সেস করতে পারেন। Replit একটি ব্রাউজার-ভিত্তিক IDE যেখানে আপনি মাত্র কয়েক মিনিটে bash শেল এক্সেস করতে পারেন।
আপনি WSL (Windows Subsystem for Linux) ব্যবহার করে আপনার উইন্ডোজ সিস্টেমের ওপর লিনাক্স ইনস্টলও করতে পারেন। সেটি 위한 একটি টিউটোরিয়াল এখানে।
ভূমিকা
Bash স্ক্রিপ্টিং-এর সংজ্ঞা
একটি bash স্ক্রিপ্ট হলো একটি ফাইল যাতে কমান্ডের একটি সিকোয়েন্স থাকে যেগুলো bash প্রোগ্রাম দ্বারা লাইন বাই লাইন এক্সিকিউট হয়। এটি আপনাকে একটি ক্রিয়ার সিকোয়েন্স পারফর্ম করতে দেয়, যেমন একটি নির্দিষ্ট ডিরেক্টরিতে নেভিগেট করা, একটি ফোল্ডার তৈরি করা, এবং কমান্ড লাইন ব্যবহার করে একটি প্রসেস লঞ্চ করা।
এই কমান্ডগুলো একটি স্ক্রিপ্টে সেভ করে, আপনি একই ধাপের সিকোয়েন্স একাধিকবার রিপিট করতে পারেন এবং স্ক্রিপ্টটি রান করে সেগুলো এক্সিকিউট করতে পারেন।
Bash স্ক্রিপ্টিং-এর সুবিধা
Bash স্ক্রিপ্টিং সিস্টেম অ্যাডমিনিস্ট্রেশন টাস্ক অটোমেট করার, সিস্টেম রিসোর্স ম্যানেজ করার, এবং Unix/Linux সিস্টেমে অন্যান্য রুটিন টাস্ক পারফর্ম করার জন্য একটি শক্তিশালী এবং নমনীয় টুল। শেল স্ক্রিপ্টিং-এর কিছু সুবিধা:
- অটোমেশন: শেল স্ক্রিপ্ট আপনাকে পুনরাবৃত্ত টাস্ক এবং প্রসেস অটোমেট করতে দেয়, সময় বাঁচায় এবং ম্যানুয়াল এক্সিকিউশনে হতে পারে এমন ত্রুটির রিস্ক কমায়।
- পোর্টেবিলিটি: শেল স্ক্রিপ্ট বিভিন্ন প্ল্যাটফর্ম এবং অপারেটিং সিস্টেমে রান করা যায়, যার মধ্যে Unix, Linux, macOS, এবং এমনকি উইন্ডোজও এমুলেটর বা ভার্চুয়াল মেশিনের মাধ্যমে।
- নমনীয়তা: শেল স্ক্রিপ্ট অত্যন্ত কাস্টোমাইজেবল এবং নির্দিষ্ট প্রয়োজনীয়তানুযায়ী সহজে মডিফাই করা যায়। এগুলো অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ বা ইউটিলিটির সাথে কম্বাইন করেও আরও শক্তিশালী স্ক্রিপ্ট তৈরি করা যায়।
- অ্যাক্সেসিবিলিটি: শেল স্ক্রিপ্ট লিখা সহজ এবং কোনো স্পেশাল টুল বা সফ্টওয়্যার দরকার নেই। যেকোনো টেক্সট এডিটর দিয়ে এডিট করা যায়, এবং অধিকাংশ অপারেটিং সিস্টেমে বিল্ট-ইন শেল ইন্টারপ্রেটার থাকে।
- ইন্টিগ্রেশন: শেল স্ক্রিপ্ট অন্যান্য টুল এবং অ্যাপ্লিকেশনের সাথে ইন্টিগ্রেট করা যায়, যেমন ডাটাবেস, ওয়েব সার্ভার, এবং ক্লাউড সার্ভিস, যা আরও কমপ্লেক্স অটোমেশন এবং সিস্টেম ম্যানেজমেন্ট টাস্ক সম্ভব করে।
- ডিবাগিং: শেল স্ক্রিপ্ট ডিবাগ করা সহজ, এবং অধিকাংশ শেলে বিল্ট-ইন ডিবাগিং এবং এরর-রিপোর্টিং টুল থাকে যা সমস্যা দ্রুত চিহ্নিত ও ফিক্স করতে সাহায্য করে।
Bash শেল এবং কমান্ড লাইন ইন্টারফেসের ওভারভিউ
"শেল" এবং "bash" শব্দগুলো একে অপর বিনিময়ে ব্যবহার হয়। কিন্তু দুটির মধ্যে একটি সাবল পার্থক্য রয়েছে।
"শেল" শব্দটি একটি প্রোগ্রামকে বোঝায় যা একটি অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য কমান্ড-লাইন ইন্টারফেস প্রদান করে। Bash (Bourne-Again SHell) Unix/Linux-এ সবচেয়ে সাধারণত ব্যবহৃত শেল 중 একটি এবং অনেক লিনাক্স ডিস্ট্রিবিউশনে ডিফল্ট শেল।
একটি শেল বা কমান্ড-লাইন ইন্টারফেস এরকম দেখায়:
শেল ইউজার থেকে কমান্ড গ্রহণ করে এবং আউটপুট ডিসপ্লে করে
উপরের আউটপুটে, zaira@Zaira হলো শেল প্রম্পট। যখন একটি শেল ইন্টারঅ্যাক্টিভলি ব্যবহার করা হয়, তবে ইউজার থেকে কমান্ডের জন্য অপেক্ষা করার সময় এটি $ দেখায়।
যদি শেল রুট হিসেবে চলছে (এডমিনিস্ট্রেটিভ অধিকার সম্পন্ন ইউজার), তবে প্রম্পট #-এ চেঞ্জ হয়। সুপারইউজার শেল প্রম্পট এরকম দেখায়:
[root@host ~]# যদিও Bash একটি শেলের ধরন, অন্যান্য শেলও উপলব্ধ, যেমন Korn shell (ksh), C shell (csh), এবং Z shell (zsh)। প্রতিটি শেলের নিজস্ব সিনট্যাক্স এবং ফিচার সেট রয়েছে, কিন্তু সবই সাধারণ উদ্দেশ্যে অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য কমান্ড-লাইন ইন্টারফেস প্রদান করে।
আপনি ps কমান্ড ব্যবহার করে আপনার শেল টাইপ নির্ধারণ করতে পারেন:
ps আমার আউটপুট এখানে:
শেল টাইপ চেক করা হচ্ছে। আমি bash শেল ব্যবহার করছি
সংক্ষেপে, "শেল" হলো একটি ব্যাপক টার্ম যা যেকোনো প্রোগ্রামকে বোঝায় যা কমান্ড-লাইন ইন্টারফেস প্রদান করে, "Bash" হলো একটি নির্দিষ্ট টাইপের শেল যা Unix/Linux সিস্টেমে ব্যাপকভাবে ব্যবহৃত হয়।
নোট: এই টিউটোরিয়ালে, আমরা "bash" শেল ব্যবহার করব।
Bash স্ক্রিপ্টিং-এ কীভাবে শুরু করবেন
কমান্ড লাইন থেকে Bash কমান্ড রান করা
আগে বলা হয়েছে, শেল প্রম্পট এরকম দেখায়:
[username@host ~]$ আপনি $ সাইন után যেকোনো কমান্ড এন্টার করতে পারেন এবং আউটপুট টার্মিনালে দেখতে পাবেন।
সাধারণত, কমান্ডগুলো এই সিনট্যাক্স ফলো করে:
command [OPTIONS] arguments কয়েকটি বেসিক bash কমান্ড এবং তাদের আউটপুট আলোচনা করা যাক। ফলো করুন :)
date: বর্তমান তারিখ দেখায়
zaira@Zaira:~/shell-tutorial$ date Tue Mar 14 13:08:57 PKT 2023 pwd: প্রেজেন্ট ওয়ার্কিং ডিরেক্টরি দেখায়।
zaira@Zaira:~/shell-tutorial$ pwd /home/zaira/shell-tutorial ls: করেন্ট ডিরেক্টরির কন্টেন্ট লিস্ট করে।
zaira@Zaira:~/shell-tutorial$ ls check_plaindrome.sh count_odd.sh env log temp echo: টেক্সট স্ট্রিং বা ভেরিয়েবলের ভ্যালু টার্মিনালে প্রিন্ট করে।
zaira@Zaira:~/shell-tutorial$ echo "Hello bash" Hello bash আপনি সবসময় man কমান্ড দিয়ে একটি কমান্ডের ম্যানুয়াল রেফার করতে পারেন।
উদাহরণস্বরূপ, ls-এর ম্যানুয়াল এরকম দেখায়:
man ব্যবহার করে কমান্ডের অপশন ডিটেইলে দেখুন
Bash স্ক্রিপ্ট কীভাবে তৈরি ও এক্সিকিউট করবেন
স্ক্রিপ্ট নামকরণ কনভেনশন
নেমিং কনভেনশন অনুযায়ী, bash স্ক্রিপ্ট .sh- দিয়ে শেষ হয়। তবে, bash স্ক্রিপ্ট sh এক্সটেনশন ছাড়াও একদম ভালো চলে।
Shebang যোগ করা
Bash স্ক্রিপ্ট একটি shebang দিয়ে শুরু হয়। Shebang হলো bash # এবং bang ! এর কম্বিনেশন ফলো করা bash শেল পাথ। এটি স্ক্রিপ্টের প্রথম লাইন। Shebang শেলকে বলে যে এটি bash শেলের মাধ্যমে এক্সিকিউট করা হবে। Shebang সিম্পলি bash ইন্টারপ্রেটারের অ্যাবসোলিউট পাথ।
নিচে shebang স্টেটমেন্টের একটি উদাহরণ:
#!/bin/bash আপনি আপনার bash শেল পাথ (যেটি উপরের থেকে ভিন্ন হতে পারে) খুঁজে বের করতে পারেন এই কমান্ড ব্যবহার করে:
which bash আমাদের প্রথম bash স্ক্রিপ্ট তৈরি করা
আমাদের প্রথম স্ক্রিপ্ট ইউজারকে একটি পথ ইনপুট দিতে বলে। बदলে, তার কন্টেন্ট লিস্ট করা হবে।
vi কমান্ড ব্যবহার করে run_all.sh নামে একটি ফাইল তৈরি করুন। আপনি আপনার পছন্দের যেকোনো এডিটর ব্যবহার করতে পারেন।
vi run_all.sh আপনার ফাইলে নিচের কমান্ডগুলো যোগ করুন এবং সেভ করুন:
#!/bin/bash echo "Today is " `date` echo -e "\nenter the path to directory" read the_path echo -e "\n you path has the following files and folders: " ls $the_path আসুন স্ক্রিপ্টটি লাইন বাই লাইন গভীরে দেখি। আমি একই স্ক্রিপ্ট আবার দেখাচ্ছি, কিন্তু এইবারে লাইন নাম্বারসহ।
1 #!/bin/bash 2 echo "Today is " `date` 3 4 echo -e "\nenter the path to directory" 5 read the_path 6 7 echo -e "\n you path has the following files and folders: " 8 ls $the_path - লাইন #১: Shebang (
#!/bin/bash) bash শেল পাথ নির্দেশ করে। - লাইন #২:
echoকমান্ড বর্তমান তারিখ ও সময় টার্মিনালে ডিসপ্লে করে। নোট করুনdateব্যাকটিক্সে রয়েছে। - লাইন #৪: আমরা চাই ইউজার একটি বৈধ পথ ইনপুট দেন।
- লাইন #৫:
readকমান্ড ইনপুট পড়ে এবংthe_pathভেরিয়েবলে স্টোর করে। - লাইন #৮:
lsকমান্ড স্টোর করা পথের ভেরিয়েবল নেয় এবং করেন্ট ফাইল ও ফোল্ডার ডিসপ্লে করে।
Bash স্ক্রিপ্ট এক্সিকিউট করা
স্ক্রিপ্টকে এক্সিকিউটেবল করার জন্য, আপনার ইউজারের জন্য এক্সিকিউশন রাইট অ্যাসাইন করুন এই কমান্ড দিয়ে:
chmod u+x run_all.sh এখানে,
chmodকরেন্ট ইউজার:uএর জন্য একটি ফাইল বা অনারশিপ মডিফাই করে।+xকরেন্ট ইউজারের এক্সিকিউশন রাইট যোগ করে। এর মানে ফাইলের ওনারই এখন স্ক্রিপ্ট রান করতে পারবেন।run_all.shহলো আমরা যা রান করতে চাই সেই ফাইল।
আপনি স্ক্রিপ্টটি নিচের যেকোনো মেথড দিয়ে রান করতে পারেন:
sh run_all.shbash run_all.sh./run_all.sh
এটি একশনে দেখুন 🚀
Bash স্ক্রিপ্টিং বেসিক
Bash স্ক্রিপ্টিং-এ কমেন্ট # দিয়ে শুরু হয়। এর মানে যেকোনো লাইন যা # দিয়ে শুরু হয় সেটি একটি কমেন্ট এবং ইন্টারপ্রেটার দ্বারা ইগনোর করা হবে।
কমেন্ট কোড ডকুমেন্ট করতে খুব হেলপফুল, এবং এটি একটি ভালো অভ্যাস যে আপনি এগুলো যোগ করবেন অন্যদের কোড বুঝতে সাহায্য করতে।
এটি কমেন্টের উদাহরণ:
# This is an example comment # Both of these lines will be ignored by the interpreter Bash-এ ভেরিয়েবল এবং ডেটা টাইপ
ভেরিয়েবল আপনাকে ডেটা স্টোর করতে দেয়। আপনি ভেরিয়েবল ব্যবহার করতে পারেন আপনার স্ক্রিপ্টে ডেটা পড়তে, এক্সেস করতে, এবং ম্যানিপুলেট করতে।
Bash-এ কোনো ডেটা টাইপ নেই। Bash-এ, একটি ভেরিয়েবল न्यুমেরিক ভ্যালু, ইন্ডিভিজুয়াল ক্যারেক্টার, বা ক্যারেক্টার স্ট্রিং স্টোর করতে পারে।
Bash-এ, আপনি নিচের উপায়গুলোতে ভেরিয়েবল ভ্যালু ব্যবহার ও সেট করতে পারেন:
- ভ্যালু সরাসরি অ্যাসাইন করুন:
country=Pakistan - একটি প্রোগ্রাম বা কমান্ড থেকে প্রাপ্ত আউটপুটের ওপর ভিত্তি করে ভ্যালু অ্যাসাইন করুন, কমান্ড সাবস্টিটিউশন ব্যবহার করে। নোট করুন যে
$এক্সিস্টিং ভেরিয়েবলের ভ্যালু অ্যাক্সেস করতে প্রয়োজন।
same_country=$country ভেরিয়েবল ভ্যালু অ্যাক্সেস করতে, ভেরিয়েবল নামের সাথে $ অ্যাপেন্ড করুন।
zaira@Zaira:~$ country=Pakistan zaira@Zaira:~$ echo $country Pakistan zaira@Zaira:~$ new_country=$country zaira@Zaira:~$ echo $new_country Pakistan ভেরিয়েবল নামকরণ কনভেনশন
Bash স্ক্রিপ্টিং-এ, নিচের বিষয়গুলো ভেরিয়েবল নামকরণ কনভেনশন:
- ভেরিয়েবল নাম একটি লেটার বা আন্ডারস্কোর (
_) দিয়ে শুরু হওয়া উচিত। - ভেরিয়েবল নাম লেটার, নাম্বার, এবং আন্ডারস্কোর (
_) কন্টেইন করতে পারে। - ভেরিয়েবল নাম কেস-সেনসিটিভ।
- ভেরিয়েবল নাম স্পেস বা স্পেশাল ক্যারেক্টার কন্টেইন করা উচিত নয়।
- বর্ণনামূলক নাম ব্যবহার করুন যা ভেরিয়েবলের উদ্দেশ্য রিফ্লেক্ট করে।
- রিজার্ভড কিওয়ার্ড, যেমন
if,then,else,fi, ইত্যাদি ভেরিয়েবল নাম হিসেবে ব্যবহার করা উচিত নয়।
Bash-এ বৈধ ভেরিয়েবল নামের কিছু উদাহরণ:
name count _var myVar MY_VAR এবং কিছু অবৈধ ভেরিয়েবল নামের উদাহরণ:
2ndvar (ভেরিয়েবল নাম নাম্বার দিয়ে শুরু) my var (ভেরিয়েবল নাম স্পেস কন্টেইন করে) my-var (ভেরিয়েবল নাম হাইফন কন্টেইন করে) এই নামকরণ কনভেনশন ফলো করলে Bash স্ক্রিপ্ট আরও পড়া সহজ এবং মেইনটেইন করা সহজ হয়।
Bash স্ক্রিপ্টে ইনপুট এবং আউটপুট
ইনপুট সংগ্রহ
এই সেকশনে, আমরা আমাদের স্ক্রিপ্টে ইনপুট দেওয়ার কিছু মেথড আলোচনা করব।
- ইউজার ইনপুট পড়া এবং একটি ভেরিয়েবলে স্টোর করা
আমরা read কমান্ড ব্যবহার করে ইউজার ইনপুট পড়তে পারি।
#!/bin/bash echo "What's your name?" read entered_name echo -e "\nWelcome to bash tutorial" $entered_name - ফাইল থেকে পড়া
এই কোড input.txt নামে একটি ফাইল থেকে প্রতিটি লাইন পড়ে এবং টার্মিনালে প্রিন্ট করে। আমরা এই আর্টিকেলে পরে while লুপ পড়ব।
while read line do echo $line done < input.txt - কমান্ড লাইন আর্গুমেন্ট
একটি bash স্ক্রিপ্ট বা ফাংশনে, $1 ডেনোট করে প্রথম আর্গুমেন্ট পাস করা, $2 ডেনোট করে দ্বিতীয় আর্গুমেন্ট পাস করা, এবং এভাবেই।
এই স্ক্রিপ্ট একটি নাম কমান্ড-লাইন আর্গুমেন্ট হিসেবে নেয় এবং একটি পার্সোনালাইজড গ্রিটিং প্রিন্ট করে।
echo "Hello, $1!" আমরা Zaira আর্গুমেন্ট হিসেবে স্ক্রিপ্টে দিয়েছি।
#!/bin/bash echo "Hello, $1!" আউটপুট:
আউটপুট ডিসপ্লে
এখানে আমরা স্ক্রিপ্ট থেকে আউটপুট পাওয়ার কিছু মেথড আলোচনা করব।
- টার্মিনালে প্রিন্ট করা:
echo "Hello, World!" এটি টার্মিনালে "Hello, World!" টেক্সট প্রিন্ট করে।
- ফাইলে লেখা:
echo "This is some text." > output.txt এটি "This is some text." টেক্সট output.txt নামে একটি ফাইলে লেখে। নোট করুন যে > অপারেটর একটি ফাইল ওভাররাইট করে যদি সেটিতে ইতিমধ্যে কিছু কন্টেন্ট থাকে।
- ফাইলে অ্যাপেন্ড করা:
echo "More text." >> output.txt এটি "More text." টেক্সট output.txt ফাইলের শেষে অ্যাপেন্ড করে।
- আউটপুট রিডাইরেক্ট করা:
ls > files.txt এটি করেন্ট ডিরেক্টরির ফাইলগুলো লিস্ট করে এবং আউটপুট files.txt নামে একটি ফাইলে লেখে। আপনি যেকোনো কমান্ডের আউটপুট এইভাবে ফাইলে রিডাইরেক্ট করতে পারেন।
বেসিক Bash কমান্ড (echo, read, ইত্যাদি)
নিচে সবচেয়ে কমনলি ব্যবহৃত কিছু bash কমান্ডের লিস্ট দেওয়া হলো:
cd: ডিরেক্টরি অন্য লোকেশনে চেঞ্জ করুন।ls: করেন্ট ডিরেক্টরির কন্টেন্ট লিস্ট করুন।mkdir: একটি নতুন ডিরেক্টরি তৈরি করুন।touch: একটি নতুন ফাইল তৈরি করুন।rm: একটি ফাইল বা ডিরেক্টরি রিমুভ করুন।cp: একটি ফাইল বা ডিরেক্টরি কপি করুন।mv: একটি ফাইল বা ডিরেক্টরি মুভ বা রিনেম করুন।echo: টার্মিনালে টেক্সট প্রিন্ট করুন।cat: ফাইলের কন্টেন্ট ক্যাটেনেট এবং প্রিন্ট করুন।grep: একটি ফাইলে প্যাটার্ন সার্চ করুন।chmod: ফাইল বা ডিরেক্টরির পারমিশন চেঞ্জ করুন।sudo: অ্যাডমিনিস্ট্রেটিভ প্রিভিলেজ দিয়ে একটি কমান্ড রান করুন।df: উপলব্ধ ডিস্ক স্পেস ডিসপ্লে করুন।history: আগে এক্সিকিউট করা কমান্ডের লিস্ট দেখুন।ps: চলমান প্রসেস সম্পর্কে ইনফরমেশন ডিসপ্লে করুন।
কন্ডিশনাল স্টেটমেন্ট (if/else)
কোডিং-এ, আপনাকে নির্দিষ্ট শর্তের ওপর ভিত্তি করে সিদ্ধান্ত নেওয়া হতে পারে। শর্ত হলো এক্সপ্রেশন যেগুলো বুলিয়ান এক্সপ্রেশনে ইভ্যালুয়েট হয় (true বা false)।
নির্দিষ্ট শর্তের ওপর ভিত্তি করে বিভিন্ন কোড ব্রাঞ্চ এক্সিকিউট করতে সাহায্য করা স্টেটমেন্টগুলাকে কন্ডিশনাল স্টেটমেন্ট বলে।
if...else সবচেয়ে কমনলি ব্যবহৃত কন্ডিশনাল স্টেটমেন্ট। অন্য প্রোগ্রামিং ল্যাঙ্গুয়েজের মতো, Bash স্ক্রিপ্টিং-ও if...else স্টেটমেন্ট সাপোর্ট করে। এবং আমরা সেটি ডিটেইলে এই ব্লগ পোস্টে পড়ব।
if স্টেটমেন্টের সিনট্যাক্স
আপনি if স্টেটমেন্ট đa উপায়ে ব্যবহার করতে পারেন। if স্টেটমেন্টের জেনেরিক স্ট্রাকচার নিচের মতো:
- শুধু
ifস্টেটমেন্ট ব্যবহার:if...then...fi ifসাথেelseস্টেটমেন্ট ব্যবহার:if...then...else...fiস্টেটমেন্টifসাথে একাধিকelseস্টেটমেন্ট ব্যবহার:if..elif..else..fi
##
if স্টেটমেন্ট কীভাবে ব্যবহার করবেন
যখন আপনি একটি একক if স্টেটমেন্ট ব্যবহার করছেন, সিনট্যাক্স নিচের মতো:
if [ condition ] then statement fi নোট করুন যে স্পেসগুলো সিনট্যাক্সের অংশ এবং রিমুভ করা উচিত নয়।
একটি উদাহরণে যাই যেখানে আমরা দুটি নাম্বার কমপেয়ার করছি খুঁজে বের করতে যে প্রথম নাম্বারটি ছোট কিনা।
#! /bin/sh a=5 b=30 if [ $a -lt $b ] then echo "a is less than b" fi আপনি উপরের স্নিপেট রান করলে, কন্ডিশন if [ $a -lt $b ] True ইভ্যালুয়েট করে, এবং if স্টেটমেন্টের ভিতরের স্টেটমেন্ট এক্সিকিউট হয়।
আউটপুট:
a is less than b if .. else স্টেটমেন্ট কীভাবে ব্যবহার করবেন
যখন আপনি একটি if স্টেটমেন্ট ব্যবহার করছেন এবং আরেকটি কন্ডিশন যোগ করতে চান, সিনট্যাক্স নিচের মতো:
if [ condition ] then statement else do this by default fi একটি উদাহরণ দেখি যেখানে আমরা খুঁজে বের করতে চাই প্রথম নাম্বারটি দ্বিতীয়টি থেকে বড় কিনা ছোট কিনা। এখানে, if [ $a -lt $b ] ইভ্যালুয়েট হয় false, যা কোডের else পার্ট রান করাতে।
#! /bin/sh a=99 b=45 if [ $a -lt $b ] then echo "a is less than b" else echo "a is greater than b" fi আউটপুট:
a is greater than b if..elif..else স্টেটমেন্ট কীভাবে ব্যবহার করবেন
ধরা যাক আপনি আরও কন্ডিশন এবং কমপেরিজন যোগ করতে চান কোডকে ডাইনামিক করার জন্য। এই কেসে, সিনট্যাক্স এরকম দেখাবে:
if [ condition ] then statement elif [ condition ] then statement else do this by default fi অর্থপূর্ণ কমপেরিজন তৈরি করতে, আমরা AND -a এবং OR -o লজিক্যাল অপারেটরও ব্যবহার করতে পারি।
এই উদাহরণে, আমরা এই কন্ডিশনগুলো ব্যবহার করে ট্রায়্যাঙ্গলের টাইপ নির্ধারণ করব:
Scalene: এমন একটি ট্রায়্যাঙ্গল যেখানে প্রতিটি সাইড দৈর্ঘ্যে ভিন্ন।Isosceles: এমন একটি ট্রায়্যাঙ্গল যেখানে ২টি সাইড সমান।Equilateral: এমন একটি ট্রায়্যাঙ্গল যেখানে সব সাইড সমান।
read a read b read c if [ $a == $b -a $b == $c -a $a == $c ] then echo EQUILATERAL elif [ $a == $b -o $b == $c -o $a == $c ] then echo ISOSCELES else echo SCALENE fi উপরের উদাহরণে, স্ক্রিপ্ট ইউজারকে ট্রায়্যাঙ্গলের তিনটি সাইড ইনপুট দিতে বলে। তারপর, সেটি সাইডগুলো কমপেয়ার করে এবং ট্রায়্যাঙ্গলের টাইপ সিদ্ধান্ত নেয়।
3 4 5 SCALENE Bash-এ লুপিং এবং ব্রাঞ্চিং
While লুপ
While লুপ একটি কন্ডিশন চেক করে এবং কন্ডিশন true থাকা পর্যন্ত লুপ করে। লুপ এক্সিকিউশন কন্ট্রোল করার জন্য আমাদের একটি কাউন্টার স্টেটমেন্ট দরকার যা কাউন্টার ইনক্রিমেন্ট করে।
নিচের উদাহরণে, (( i += 1 )) হলো কাউন্টার স্টেটমেন্ট যা i-র ভ্যালু ইনক্রিমেন্ট করে। লুপটি একজাক্ট ১০ বার রান করবে।
#!/bin/bash i=1 while [[ $i -le 10 ]] ; do echo "$i" (( i += 1 )) done For লুপ
for লুপ, while লুপের মতো, আপনাকে স্টেটমেন্ট একটি নির্দিষ্ট সংখ্যক বার এক্সিকিউট করতে দেয়। প্রতিটি লুপ তার সিনট্যাক্স এবং ব্যবহারে ভিন্ন।
নিচের উদাহরণে, লুপটি ৫ বার ইটারেট করবে।
#!/bin/bash for i in {1..5} do echo $i done কেস স্টেটমেন্ট
Bash-এ, কেস স্টেটমেন্ট ব্যবহার করা হয় একটি দিয়ে ভ্যালু কমপেয়ার করার জন্য প্যাটার্নের একটি লিস্টের সাথে এবং প্রথম ম্যাচ করা প্যাটার্নের ওপর ভিত্তি করে কোডের একটি ব্লক এক্সিকিউট করতে। Bash-এ কেস স্টেটমেন্টের সিনট্যাক্স নিচের মতো:
case expression in pattern1) # code to execute if expression matches pattern1 ;; pattern2) # code to execute if expression matches pattern2 ;; pattern3) # code to execute if expression matches pattern3 ;; *) # code to execute if none of the above patterns match expression ;; esac এখানে, "expression" হলো সেই ভ্যালু যেটি আমরা কমপেয়ার করতে চাই, এবং "pattern1", "pattern2", "pattern3", ইত্যাদি হলো সেই প্যাটার্ন যেগুলো আমরা সেটির সাথে কমপেয়ার করতে চাই।
ডাবল সেমিকোলন ";;" প্রতিটি প্যাটার্নের জন্য এক্সিকিউট হওয়া কোড ব্লককে সেপারেট করে। অ্যাস্টারিস্ক "*" ডিফল্ট কেসকে রিপ্রেজেন্ট করে, যা এক্সিকিউট হয় যদি কোনো স্পেসিফাইড প্যাটার্ন এক্সপ্রেশনের সাথে ম্যাচ না করে।
একটি উদাহরণ দেখি।
fruit="apple" case $fruit in "apple") echo "This is a red fruit." ;; "banana") echo "This is a yellow fruit." ;; "orange") echo "This is an orange fruit." ;; *) echo "Unknown fruit." ;; esac এই উদাহরণে, যেহেতু "fruit"-এর ভ্যালু "apple", প্রথম প্যাটার্ন ম্যাচ করে, এবং "This is a red fruit." ইচো করা কোড ব্লক এক্সিকিউট হয়। যদি "fruit"-এর ভ্যালু "banana" হত, তবে দ্বিতীয় প্যাটার্ন ম্যাচ করত এবং "This is a yellow fruit." ইচো করা ব্লক এক্সিকিউট হত, এবং এভাবেই। যদি "fruit"-এর ভ্যালু কোনো স্পেসিফাইড প্যাটার্নের সাথে ম্যাচ না করে, তবে ডিফল্ট কেস এক্সিকিউট হয়, যা "Unknown fruit." ইচো করে।
cron ব্যবহার করে স্ক্রিপ্ট শিডিউল করার পদ্ধতি
Cron ইউনিক্স-লাইক অপারেটিং সিস্টেমে উপলব্ধ একটি শক্তিশালী জব স্কিডিউলিং ইউটিলিটি। cron কনফিগার করে, আপনি অটোমেটেড জব সেট আপ করতে পারেন ডেইলি, উইকলি, মাসিক, বা নির্দিষ্ট সময়ের বেসিসে রান করতে। cron দ্বারা প্রদত্ত অটোমেশন ক্যাপাবিলিটি লিনাক্স সিস্টেম অ্যাডমিনিস্ট্রেশনে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
cron শিডিউল করার সিনট্যাক্স নিচের মতো:
# Cron job example * * * * * sh /path/to/script.sh এখানে, *গুলো রিপ্রেজেন্ট করে মিনিট(স) আওয়ার(স) ডে(স) মन्थ(স) উইকডে(স), রেসপেক্টিভলি।
cron জব শিডিউল করার কিছু উদাহরণ নিচে:
0 0 প্রতিদিন মিডনাইটে একটি স্ক্রিপ্ট রান করুন 0 0 /path/to/script.sh /5 প্রতি ৫ মিনিটে একটি স্ক্রিপ্ট রান করুন /5 /path/to/script.sh 0 6 1-5 সোমবার থেকে শুক্রবার সকাল ৬টায় স্ক্রিপ্ট রান করুন 0 6 1-5 /path/to/script.sh 0 0 1-7 প্রতিমাসের প্রথম ৭ দিন স্ক্রিপ্ট রান করুন 0 0 1-7 /path/to/script.sh 0 12 1 প্রতিমাসের প্রথম দিন দুপুর ১২টায় স্ক্রিপ্ট রান করুন 0 12 1 /path/to/script.sh crontab ব্যবহার করা
crontab ইউটিলিটি ব্যবহার করা হয় cron জব অ্যাড ও এডিট করতে।
crontab -l একটি নির্দিষ্ট ইউজারের জন্য ইতিমধ্যে শিডিউল করা স্ক্রিপ্ট লিস্ট করে।
আপনি crontab -e দিয়ে cron অ্যাড ও এডিট করতে পারেন।
কর্ন জব সম্পর্কে আরও পড়তে পারেন আমার অন্য আর্টিকেলে এখানে।
Bash স্ক্রিপ্ট ডিবাগ এবং ট্রাবলশুট করার পদ্ধতি
ডিবাগিং এবং ট্রাবলশুটিং যেকোনো Bash স্ক্রিপ্টারের জন্য অপরিহার্য দক্ষতা। Bash স্ক্রিপ্ট খুব শক্তিশালী হলেও, সেগুলো ত্রুটি এবং অনপ্রত্যাশিত বিহেভিয়ারের আশঙ্কা থাকে। এই সেকশনে, আমরা Bash স্ক্রিপ্ট ডিবাগ এবং ট্রাবলশুট করার কিছু টিপস এবং টেকনিক আলোচনা করব।
set -x অপশন সেট করুন
Bash স্ক্রিপ্ট ডিবাগ করার সবচেয়ে উপযোগী টেকনিকের একটি হলো স্ক্রিপ্টের শুরুতে set -x অপশন সেট করা। এই অপশন ডিবাগিং মোড এনাবল করে, যা Bash-কে প্রতিটি কমান্ড যা এক্সিকিউট করে সেটি টার্মিনালে প্রিন্ট করতে বাধ্য করে, একটি + সাইন দ্বারা প্রসিডেড। এটি আপনার স্ক্রিপ্টে কোথায় ত্রুটি হচ্ছে সেটি চিহ্নিত করতে অবিশ্বাস্যভাবে হেলপফুল হতে পারে।
#!/bin/bash set -x # আপনার স্ক্রিপ্ট এখানে থাকে এক্সিট কোড চেক করুন
যখন Bash একটি এরর এনকাউন্টার করে, এটি একটি এক্সিট কোড সেট করে যা ত্রুটির প্রকৃতি ইন্ডিকেট করে। আপনি সবচেয়ে সাম্প্রতিক কমান্ডের এক্সিট কোড $? ভেরিয়েবল ব্যবহার করে চেক করতে পারেন। 0 ভ্যালু সাকসেস ইন্ডিকেট করে, অন্য যেকোনো ভ্যালু এরর ইন্ডিকেট করে।
#!/bin/bash # আপনার স্ক্রিপ্ট এখানে থাকে if [ $? -ne 0 ]; then echo "Error occurred." fi echo স্টেটমেন্ট ব্যবহার করুন
Bash স্ক্রিপ্ট ডিবাগ করার আরেকটি উপযোগী টেকনিক হলো আপনার কোডে জায়গা জায়গায় echo স্টেটমেন্ট ইনসার্ট করা। এটি আপনাকে চিহ্নিত করতে সাহায্য করতে পারে কোথায় ত্রুটি হচ্ছে এবং ভেরিয়েবলগুলোতে কী ভ্যালু পাস হচ্ছে।
#!/bin/bash # আপনার স্ক্রিপ্ট এখানে থাকে echo "Value of variable x is: $x" # আরও কোড এখানে থাকে set -e অপশন ব্যবহার করুন
আপনি যদি চান আপনার স্ক্রিপ্ট তৎক্ষণাৎ এক্সিট করے যদি স্ক্রিপ্টের যেকোনো কমান্ড ফেল করে, তবে আপনি set -e অপশন ব্যবহার করতে পারেন। এই অপশন Bash-কে এরর দিয়ে এক্সিট করতে বাধ্য করবে যদি স্ক্রিপ্টের যেকোনো কমান্ড ফেল করে, যা আপনার স্ক্রিপ্টে ত্রুটি চিহ্নিত ও ফিক্স করা সহজ করে দেয়।
#!/bin/bash set -e # আপনার স্ক্রিপ্ট এখানে থাকে লগ ভেরিফাই করে ক্রন ট্রাবলশুট করা
আমরা লগ ফাইল ব্যবহার করে ক্রন ট্রাবলশুট করতে পারি। সব শিডিউলড জবের জন্য লগ মেইনটেইন করা থাকে। আপনি লগ চেক ও ভেরিফাই করতে পারেন যে কোনো স্পেসিফিক জব ইন্টেন্ডেডভাবে রান হয়েছে কিনা।
Ubuntu/Debian-এ, আপনি cron লগ পাবেন:
/var/log/syslog অন্য ডিস্ট্রিবিউশনের জন্য লোকেশন ভিন্ন।
একটি cron জব লগ ফাইল এরকম দেখাতে পারে:
2022-03-11 00:00:01 Task started 2022-03-11 00:00:02 Running script /path/to/script.sh 2022-03-11 00:00:03 Script completed successfully 2022-03-11 00:05:01 Task started 2022-03-11 00:05:02 Running script /path/to/script.sh 2022-03-11 00:05:03 Error: unable to connect to database 2022-03-11 00:05:03 Script exited with error code 1 2022-03-11 00:10:01 Task started 2022-03-11 00:10:02 Running script /path/to/script.sh 2022-03-11 00:10:03 Script completed successfully উপসংহার
এই আর্টিকেলে, আমরা টার্মিনাল এক্সেস করার পদ্ধতি দিয়ে শুরু করেছি এবং কিছু বেসিক bash কমান্ড রান করেছি। আমরা এছাড়া শেল কী সেটি সংক্ষেপে দেখেছি। আমরা লুপ এবং কন্ডিশনাল ব্যবহার করে কোড ব্রাঞ্চিং সংক্ষেপে দেখেছি। অবশেষে, আমরা cron ব্যবহার করে স্ক্রিপ্ট অটোমেট করার পদ্ধতি এবং কিছু ট্রাবলশুটিং টেকনিক আলোচনা করেছি।
Bash স্ক্রিপ্টিং সম্পর্কে আরও শিখনের রিসোর্স
আপনি যদি bash স্ক্রিপ্টিং-এর বিশ্বে গভীরে যেতে চান, আমি পরামর্শ দেব freeCodeCamp-এ লিনাক্স-এ ৬ ঘণ্টার এই কোর্সটি দেখুন।
এই টিউটোরিয়াল থেকে আপনার ফেভারিট কী শিখলেন? আপনি এই প্ল্যাটফর্মগুলোর যেকোনো একটিতে আমার সাথে কানেক্ট হতে পারেন। 📧
পরবর্তী টিউটোরিয়ালে দেখা হবে, happy coding 😁
ব্যানার ইমেজ ক্রেডিট: Image by Freepik
নিঃশুল্ক কোডিং শিখুন। freeCodeCamp-এর ওপেন সোর্স কারিকুলাম ৪০,০০০-এর বেশি লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন।