লিনাক্সে, প্রক্রিয়া অটোমেশন শেল স্ক্রিপ্টিংয়ের উপর অনেক বেশি নির্ভর করে। এর মধ্যে একটি ফাইল তৈরি করা হয় যাতে একাধিক কমান্ড রয়েছে যা একসাথে চালানো যেতে পারে।
এই নিবন্ধে, আমরা ব্যাশ স্ক্রিপ্টিংয়ের মূল বিষয়গুলি দিয়ে শুরু করব যার মধ্যে ভেরিয়েবল, কমান্ড, ইনপুট/আউটপুট এবং ডিবাগিং অন্তর্ভুক্ত রয়েছে। আমরা পথ ধরে প্রতিটি উদাহরণও দেখতে পাব।
চলুন শুরু করা যাক. 🚀
সূচিপত্র
- প্রাক-প্রয়োজনীয়তা
- পরিচয়
- ব্যাশ স্ক্রিপ্টিংয়ের সংজ্ঞা
- ব্যাশ স্ক্রিপ্টিংয়ের সুবিধা
- ব্যাশ শেল এবং কমান্ড লাইন ইন্টারফেসের ওভারভিউ
- কিভাবে ব্যাশ স্ক্রিপ্টিং দিয়ে শুরু করবেন
- কমান্ড লাইন থেকে ব্যাশ কমান্ড কিভাবে চালাবেন
- কিভাবে ব্যাশ স্ক্রিপ্ট তৈরি ও চালানো যায়
-
ব্যাশ স্ক্রিপ্টিং বেসিক
-
ব্যাশ স্ক্রিপ্টিং এ মন্তব্য
- ব্যাশে ভেরিয়েবল এবং ডেটা প্রকারগুলি
- ব্যাশ স্ক্রিপ্টে ইনপুট এবং আউটপুট
- বেসিক ব্যাশ কমান্ড (ইকো, রিড, ইত্যাদি)
-
শর্তসাপেক্ষ বিবৃতি (যদি/অন্যথায়)
-
ব্যাশে লুপিং এবং ব্রাঞ্চিং
- লুপ করার সময়
- লুপের জন্য
- কেসের বিবৃতি
- ক্রন ব্যবহার করে কিভাবে স্ক্রিপ্ট নির্ধারণ করবেন
- ব্যাশ স্ক্রিপ্টগুলি কীভাবে ডিবাগ এবং সমস্যা সমাধান করবেন
- উপসংহার
- ব্যাশ স্ক্রিপ্টিং সম্পর্কে আরও শেখার জন্য সম্পদ
প্রাক-প্রয়োজনীয়তা
এই টিউটোরিয়ালটি অনুসরণ করতে, আপনার নিম্নলিখিত অ্যাক্সেস থাকা উচিত:
- কমান্ড লাইনে অ্যাক্সেস সহ লিনাক্সের একটি চলমান সংস্করণ।
আপনার যদি লিনাক্স ইন্সটল না থাকে বা আপনি সবে শুরু করছেন, আপনি সহজেই Replit এর মাধ্যমে Linux কমান্ড লাইন অ্যাক্সেস করতে পারবেন। রিপ্লিট হল একটি ব্রাউজার-ভিত্তিক IDE যেখানে আপনি কয়েক মিনিটের মধ্যে ব্যাশ শেল অ্যাক্সেস করতে পারবেন।
আপনি WSL (লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম) ব্যবহার করে আপনার উইন্ডোজ সিস্টেমের উপরে লিনাক্স ইনস্টল করতে পারেন। এখানে তার জন্য একটি টিউটোরিয়াল আছে।
পরিচয়
ব্যাশ স্ক্রিপ্টিংয়ের সংজ্ঞা
একটি ব্যাশ স্ক্রিপ্ট হল একটি ফাইল যাতে কমান্ডের একটি ক্রম থাকে যা ব্যাশ প্রোগ্রাম লাইন দ্বারা লাইন দ্বারা নির্বাহ করা হয়। এটি আপনাকে একটি নির্দিষ্ট ডিরেক্টরিতে নেভিগেট করা, একটি ফোল্ডার তৈরি করা এবং কমান্ড লাইন ব্যবহার করে একটি প্রক্রিয়া চালু করার মতো একাধিক ক্রিয়াকলাপ সম্পাদন করতে দেয়।
এই কমান্ডগুলিকে একটি স্ক্রিপ্টে সংরক্ষণ করার মাধ্যমে, আপনি একাধিকবার ধাপগুলির একই ক্রম পুনরাবৃত্তি করতে পারেন এবং স্ক্রিপ্টটি চালানোর মাধ্যমে সেগুলি কার্যকর করতে পারেন৷
ব্যাশ স্ক্রিপ্টিংয়ের সুবিধা
ব্যাশ স্ক্রিপ্টিং হল একটি শক্তিশালী এবং বহুমুখী হাতিয়ার যা স্বয়ংক্রিয়ভাবে সিস্টেম অ্যাডমিনিস্ট্রেশনের কাজ, সিস্টেম রিসোর্স পরিচালনা এবং ইউনিক্স/লিনাক্স সিস্টেমে অন্যান্য রুটিন কাজ সম্পাদন করার জন্য। শেল স্ক্রিপ্টিংয়ের কিছু সুবিধা হল:
- অটোমেশন :শেল স্ক্রিপ্টগুলি আপনাকে পুনরাবৃত্তিমূলক কাজ এবং প্রক্রিয়াগুলিকে স্বয়ংক্রিয় করতে দেয়, সময় বাঁচায় এবং ম্যানুয়াল সম্পাদনের সাথে ঘটতে পারে এমন ত্রুটির ঝুঁকি হ্রাস করে৷
- পোর্টেবিলিটি :শেল স্ক্রিপ্টগুলি এমুলেটর বা ভার্চুয়াল মেশিন ব্যবহারের মাধ্যমে ইউনিক্স, লিনাক্স, ম্যাকওএস, এমনকি উইন্ডোজ সহ বিভিন্ন প্ল্যাটফর্ম এবং অপারেটিং সিস্টেমে চালানো যেতে পারে৷
- নমনীয়তা :শেল স্ক্রিপ্টগুলি অত্যন্ত কাস্টমাইজযোগ্য এবং নির্দিষ্ট প্রয়োজনীয়তা অনুসারে সহজেই পরিবর্তন করা যেতে পারে। আরও শক্তিশালী স্ক্রিপ্ট তৈরি করতে এগুলিকে অন্যান্য প্রোগ্রামিং ভাষা বা ইউটিলিটিগুলির সাথে একত্রিত করা যেতে পারে৷
- অ্যাক্সেসিবিলিটি :শেল স্ক্রিপ্ট লিখতে সহজ এবং কোন বিশেষ সরঞ্জাম বা সফ্টওয়্যার প্রয়োজন হয় না. এগুলি যেকোন পাঠ্য সম্পাদক ব্যবহার করে সম্পাদনা করা যেতে পারে এবং বেশিরভাগ অপারেটিং সিস্টেমে একটি অন্তর্নির্মিত শেল ইন্টারপ্রেটার থাকে৷
- ইন্টিগ্রেশন :শেল স্ক্রিপ্টগুলিকে আরও জটিল অটোমেশন এবং সিস্টেম ম্যানেজমেন্ট কাজের জন্য অনুমতি দেয়, যেমন ডেটাবেস, ওয়েব সার্ভার এবং ক্লাউড পরিষেবাগুলির মতো অন্যান্য সরঞ্জাম এবং অ্যাপ্লিকেশনগুলির সাথে একীভূত করা যেতে পারে৷
- ডিবাগিং৷ :শেল স্ক্রিপ্টগুলি ডিবাগ করা সহজ, এবং বেশিরভাগ শেলগুলিতে অন্তর্নির্মিত ডিবাগিং এবং ত্রুটি-প্রতিবেদন সরঞ্জাম রয়েছে যা সমস্যাগুলি সনাক্ত করতে এবং দ্রুত সমাধান করতে সহায়তা করতে পারে৷
ব্যাশ শেল এবং কমান্ড লাইন ইন্টারফেসের ওভারভিউ
"শেল" এবং "ব্যাশ" শব্দগুলি পরস্পর বিনিময়যোগ্যভাবে ব্যবহৃত হয়। কিন্তু উভয়ের মধ্যে একটি সূক্ষ্ম পার্থক্য আছে।
"শেল" শব্দটি এমন একটি প্রোগ্রামকে বোঝায় যা একটি অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি কমান্ড-লাইন ইন্টারফেস প্রদান করে। ব্যাশ (বোর্ন-আগেইন শেল) হল সবচেয়ে বেশি ব্যবহৃত ইউনিক্স/লিনাক্স শেলগুলির মধ্যে একটি এবং এটি অনেকগুলি লিনাক্স ডিস্ট্রিবিউশনে ডিফল্ট শেল৷
একটি শেল বা কমান্ড-লাইন ইন্টারফেস এইরকম দেখায়:
শেল ব্যবহারকারীর কাছ থেকে কমান্ড গ্রহণ করে এবং আউটপুট প্রদর্শন করে
উপরের আউটপুটে, zaira@Zaira শেল প্রম্পট। যখন একটি শেল ইন্টারেক্টিভভাবে ব্যবহার করা হয়, তখন এটি একটি $ প্রদর্শন করে যখন এটি ব্যবহারকারীর কাছ থেকে একটি আদেশের জন্য অপেক্ষা করছে।
যদি শেলটি রুট হিসাবে চলছে (প্রশাসনিক অধিকার সহ একজন ব্যবহারকারী), প্রম্পটটি # এ পরিবর্তিত হয় . সুপার ইউজার শেল প্রম্পটটি এইরকম দেখায়:
[root@host ~]#
যদিও বাশ এক ধরনের শেল, সেখানে অন্যান্য শেলও পাওয়া যায়, যেমন কর্ন শেল (ksh), C শেল (csh), এবং Z শেল (zsh)। প্রতিটি শেলের নিজস্ব সিনট্যাক্স এবং বৈশিষ্ট্যের সেট রয়েছে, তবে তারা সকলেই অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি কমান্ড-লাইন ইন্টারফেস প্রদানের সাধারণ উদ্দেশ্য ভাগ করে নেয়।
আপনি ps ব্যবহার করে আপনার শেল টাইপ নির্ধারণ করতে পারেন কমান্ড:
ps
এখানে আমার জন্য আউটপুট:
শেলের ধরন পরীক্ষা করা হচ্ছে। আমি ব্যাশ শেল ব্যবহার করছি
সংক্ষেপে, যদিও "শেল" একটি বিস্তৃত শব্দ যা কমান্ড-লাইন ইন্টারফেস প্রদান করে এমন কোনো প্রোগ্রামকে বোঝায়, "ব্যাশ" হল একটি নির্দিষ্ট ধরনের শেল যা ইউনিক্স/লিনাক্স সিস্টেমে ব্যাপকভাবে ব্যবহৃত হয়।
দ্রষ্টব্য:এই টিউটোরিয়ালে, আমরা "bash" শেল ব্যবহার করব।
ব্যাশ স্ক্রিপ্টিং দিয়ে কিভাবে শুরু করবেন
কমান্ড লাইন থেকে ব্যাশ কমান্ড চালানো হচ্ছে
পূর্বে উল্লিখিত হিসাবে, শেল প্রম্পট এইরকম কিছু দেখায়:
[username@host ~]$
আপনি $ এর পরে যেকোনো কমান্ড লিখতে পারেন সাইন করুন এবং টার্মিনালে আউটপুট দেখুন।
সাধারণত, কমান্ড এই সিনট্যাক্স অনুসরণ করে:
command [OPTIONS] arguments
আসুন কয়েকটি বেসিক ব্যাশ কমান্ড আলোচনা করি এবং তাদের আউটপুট দেখি। সাথে অনুসরণ করতে ভুলবেন না :)
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 ব্যবহার করে বিস্তারিতভাবে একটি কমান্ডের বিকল্প দেখতে পারেন
কিভাবে ব্যাশ স্ক্রিপ্ট তৈরি এবং কার্যকর করবেন
স্ক্রিপ্ট নামকরণের নিয়মাবলী
নামকরণের মাধ্যমে, ব্যাশ স্ক্রিপ্টগুলি .sh দিয়ে শেষ হয় . যাইহোক, ব্যাশ স্ক্রিপ্টগুলি sh ছাড়াই পুরোপুরি সূক্ষ্মভাবে চলতে পারে এক্সটেনশন।
শেবাং যোগ করা হচ্ছে
ব্যাশ স্ক্রিপ্ট একটি shebang দিয়ে শুরু হয় . Shebang হল bash # এর সংমিশ্রণ এবং bang ! ব্যাশ শেল পথ অনুসরণ করে। এটি স্ক্রিপ্টের প্রথম লাইন। শেবাং শেলকে ব্যাশ শেলের মাধ্যমে এটি কার্যকর করতে বলে। শেবাং হল ব্যাশ ইন্টারপ্রেটারের জন্য একটি পরম পথ।
নীচে শেবাং বিবৃতিটির একটি উদাহরণ।
#!/bin/bash
আপনি কমান্ড ব্যবহার করে আপনার ব্যাশ শেল পথ (যা উপরের থেকে ভিন্ন হতে পারে) খুঁজে পেতে পারেন:
which bash
আমাদের প্রথম ব্যাশ স্ক্রিপ্ট তৈরি করা হচ্ছে
আমাদের প্রথম স্ক্রিপ্ট ব্যবহারকারীকে একটি পাথ প্রবেশ করতে অনুরোধ করে। বিনিময়ে, এর বিষয়বস্তু তালিকাভুক্ত করা হবে।
run_all.sh নামে একটি ফাইল তৈরি করুন vi ব্যবহার করে আদেশ আপনি আপনার পছন্দের যেকোনো সম্পাদক ব্যবহার করতে পারেন।
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
- লাইন # 1:শেবাং (
#!/bin/bash) ব্যাশ শেল পথের দিকে নির্দেশ করে। - লাইন #2:
echoকমান্ড টার্মিনালে বর্তমান তারিখ এবং সময় প্রদর্শন করছে। মনে রাখবেন যেdateব্যাকটিক্সে আছে। - লাইন #4:আমরা চাই ব্যবহারকারী একটি বৈধ পথ প্রবেশ করুক।
- লাইন #5:
readকমান্ড ইনপুট পড়ে এবং ভেরিয়েবলthe_pathএ সংরক্ষণ করে . - লাইন #8:
lsকমান্ড সঞ্চিত পথের সাথে ভেরিয়েবল নেয় এবং বর্তমান ফাইল এবং ফোল্ডারগুলি প্রদর্শন করে।
ব্যাশ স্ক্রিপ্ট চালানো হচ্ছে
স্ক্রিপ্টটি এক্সিকিউটেবল করতে, এই কমান্ডটি ব্যবহার করে আপনার ব্যবহারকারীকে এক্সিকিউশন অধিকার বরাদ্দ করুন:
chmod u+x run_all.sh
এখানে,
chmodবর্তমান ব্যবহারকারীর জন্য একটি ফাইলের মালিকানা পরিবর্তন করে :u.+xবর্তমান ব্যবহারকারীর মৃত্যুদন্ডের অধিকার যোগ করে। এর মানে হল যে ব্যবহারকারী যিনি মালিক তিনি এখন স্ক্রিপ্ট চালাতে পারেন৷
৷ run_all.shফাইলটি আমরা চালাতে চাই৷
৷
আপনি উল্লিখিত পদ্ধতিগুলির যেকোনো একটি ব্যবহার করে স্ক্রিপ্টটি চালাতে পারেন:
sh run_all.shbash run_all.sh./run_all.sh
চলুন দেখে নেওয়া যাক এটি কার্যকর হচ্ছে 🚀
ব্যাশ স্ক্রিপ্টিং বেসিক
মন্তব্য একটি # দিয়ে শুরু হয় ব্যাশ স্ক্রিপ্টিং এ। এর মানে হল যে কোনও লাইন যা একটি # দিয়ে শুরু হয় একটি মন্তব্য এবং দোভাষী দ্বারা উপেক্ষা করা হবে।
মন্তব্যগুলি কোড নথিভুক্ত করার জন্য খুবই সহায়ক, এবং অন্যদের কোড বুঝতে সাহায্য করার জন্য সেগুলি যোগ করা একটি ভাল অভ্যাস।
এগুলি মন্তব্যের উদাহরণ:
# This is an example comment
# Both of these lines will be ignored by the interpreter
ব্যাশে ভেরিয়েবল এবং ডেটা প্রকারগুলি
ভেরিয়েবল আপনাকে ডেটা সঞ্চয় করতে দেয়। আপনি আপনার স্ক্রিপ্ট জুড়ে ডেটা পড়তে, অ্যাক্সেস করতে এবং ম্যানিপুলেট করতে ভেরিয়েবল ব্যবহার করতে পারেন।
ব্যাশে কোন ডাটা টাইপ নেই। ব্যাশে, একটি ভেরিয়েবল সাংখ্যিক মান, স্বতন্ত্র অক্ষর বা অক্ষরের স্ট্রিং সংরক্ষণ করতে সক্ষম।
ব্যাশে, আপনি নিম্নলিখিত উপায়ে পরিবর্তনশীল মানগুলি ব্যবহার এবং সেট করতে পারেন:
- মানটি সরাসরি বরাদ্দ করুন:
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
ভেরিয়েবল নামকরণের নিয়মাবলী
ব্যাশ স্ক্রিপ্টিং-এ, নিম্নলিখিত পরিবর্তনশীল নামকরণের নিয়মগুলি রয়েছে:
- ভেরিয়েবল নাম একটি অক্ষর বা একটি আন্ডারস্কোর দিয়ে শুরু হওয়া উচিত (
_)। - ভেরিয়েবল নামের অক্ষর, সংখ্যা এবং আন্ডারস্কোর থাকতে পারে (
_)। - ভেরিয়েবল নামগুলি কেস-সংবেদনশীল৷ ৷
- ভেরিয়েবল নামের স্পেস বা বিশেষ অক্ষর থাকা উচিত নয়।
- ভেরিয়েবলের উদ্দেশ্য প্রতিফলিত করে এমন বর্ণনামূলক নাম ব্যবহার করুন।
- সংরক্ষিত কীওয়ার্ড ব্যবহার করা এড়িয়ে চলুন, যেমন
if,then,else,fi, এবং তাই পরিবর্তনশীল নাম হিসাবে।
এখানে Bash-এ বৈধ পরিবর্তনশীল নামের কিছু উদাহরণ রয়েছে:
name
count
_var
myVar
MY_VAR
এবং এখানে অবৈধ পরিবর্তনশীল নামের কিছু উদাহরণ রয়েছে:
2ndvar (variable name starts with a number)
my var (variable name contains a space)
my-var (variable name contains a hyphen)
এই নামকরণের নিয়মগুলি অনুসরণ করা ব্যাশ স্ক্রিপ্টগুলিকে আরও পঠনযোগ্য এবং বজায় রাখা সহজ করে তোলে৷
ব্যাশ স্ক্রিপ্টে ইনপুট এবং আউটপুট
ইনপুট সংগ্রহ করা
এই বিভাগে, আমরা আমাদের স্ক্রিপ্টগুলিতে ইনপুট দেওয়ার জন্য কিছু পদ্ধতি নিয়ে আলোচনা করব।
- ব্যবহারকারীর ইনপুট পড়া এবং একটি ভেরিয়েবলে সংরক্ষণ করা
আমরা read ব্যবহার করে ব্যবহারকারীর ইনপুট পড়তে পারি আদেশ৷
#!/bin/bash
echo "What's your name?"
read entered_name
echo -e "\nWelcome to bash tutorial" $entered_name
- একটি ফাইল থেকে পড়া
এই কোডটি input.txt নামের একটি ফাইল থেকে প্রতিটি লাইন পড়ে এবং টার্মিনালে প্রিন্ট করে। আমরা এই নিবন্ধে পরে লুপ করার সময় অধ্যয়ন করব।
while read line
do
echo $line
done < input.txt
- কমান্ড লাইন আর্গুমেন্ট
একটি ব্যাশ স্ক্রিপ্ট বা ফাংশনে, $1 পাস করা প্রাথমিক যুক্তি বোঝায়, $2 পাস করা দ্বিতীয় যুক্তি বোঝায়, ইত্যাদি।
এই স্ক্রিপ্টটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে একটি নাম নেয় এবং একটি ব্যক্তিগতকৃত অভিবাদন প্রিন্ট করে৷
echo "Hello, $1!"
আমরা Zaira সরবরাহ করেছি স্ক্রিপ্টে আমাদের যুক্তি হিসেবে।
#!/bin/bash
echo "Hello, $1!"
আউটপুট:
আউটপুট প্রদর্শন করা হচ্ছে
এখানে আমরা স্ক্রিপ্ট থেকে আউটপুট পাওয়ার কিছু পদ্ধতি নিয়ে আলোচনা করব।
- টার্মিনালে মুদ্রণ:
echo "Hello, World!"
এটি "হ্যালো, ওয়ার্ল্ড!" লেখাটি প্রিন্ট করে। টার্মিনালে।
- একটি ফাইলে লেখা:
echo "This is some text." > output.txt
এটি টেক্সট লিখে "এটি কিছু পাঠ্য।" output.txt নামের একটি ফাইলে . মনে রাখবেন যে > অপারেটর একটি ফাইল ওভাররাইট করে যদি এটিতে ইতিমধ্যে কিছু বিষয়বস্তু থাকে।
- একটি ফাইলে সংযোজন:
echo "More text." >> output.txt
এটি "আরো পাঠ্য" টেক্সট যুক্ত করে। output.txt ফাইলের শেষ পর্যন্ত .
- আউটপুট পুনঃনির্দেশ করা হচ্ছে:
ls > files.txt
এটি বর্তমান ডিরেক্টরির ফাইলগুলিকে তালিকাভুক্ত করে এবং files.txt নামের একটি ফাইলে আউটপুট লেখে। . আপনি এইভাবে একটি ফাইলে যেকোনো কমান্ডের আউটপুট পুনঃনির্দেশ করতে পারেন।
বেসিক ব্যাশ কমান্ড (ইকো, রিড, ইত্যাদি)
এখানে কিছু সাধারণভাবে ব্যবহৃত ব্যাশ কমান্ডের একটি তালিকা রয়েছে:
cd:ডিরেক্টরীটিকে অন্য জায়গায় পরিবর্তন করুন।ls:বর্তমান ডিরেক্টরির বিষয়বস্তু তালিকাভুক্ত করুন।mkdir:একটি নতুন ডিরেক্টরি তৈরি করুন৷touch:একটি নতুন ফাইল তৈরি করুন৷rm:একটি ফাইল বা ডিরেক্টরি সরান।cp:একটি ফাইল বা ডিরেক্টরি অনুলিপি করুন।mv:একটি ফাইল বা ডিরেক্টরি সরান বা পুনঃনামকরণ করুন৷
৷ echo:টার্মিনালে টেক্সট প্রিন্ট করুন।cat:একটি ফাইলের বিষয়বস্তু সংযুক্ত করুন এবং মুদ্রণ করুন।grep:একটি ফাইলে একটি প্যাটার্ন অনুসন্ধান করুন৷
৷ chmod:একটি ফাইল বা ডিরেক্টরির অনুমতি পরিবর্তন করুন৷
৷ sudo:প্রশাসনিক সুবিধা সহ একটি কমান্ড চালান।df:উপলব্ধ ডিস্কের পরিমাণ প্রদর্শন করুন৷history:পূর্বে সম্পাদিত কমান্ডের একটি তালিকা দেখান৷ps:চলমান প্রক্রিয়া সম্পর্কে তথ্য প্রদর্শন করুন৷
শর্তগত বিবৃতি (যদি/অন্যথায়)
যে অভিব্যক্তিগুলি একটি বুলিয়ান ফলাফল তৈরি করে, হয় সত্য বা মিথ্যা, তাকে শর্ত বলা হয়। if সহ শর্তগুলি মূল্যায়ন করার বিভিন্ন উপায় রয়েছে৷ , if-else , if-elif-else , এবং নেস্টেড শর্তাবলী।
সিনট্যাক্স :
if [[ condition ]];
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
আমরা লজিক্যাল অপারেটর ব্যবহার করতে পারি যেমন AND -a এবং অথবা -o তুলনা করতে যা আরও তাৎপর্যপূর্ণ।
if [ $a -gt 60 -a $b -lt 100 ]
চলুন একটি ব্যাশ স্ক্রিপ্টের উদাহরণ দেখি যা if ব্যবহার করে , if-else , এবং if-elif-else ব্যবহারকারী-ইনপুট করা সংখ্যা ধনাত্মক, ঋণাত্মক বা শূন্য কিনা তা নির্ধারণ করার জন্য বিবৃতি:
#!/bin/bash
echo "Please enter a number: "
read num
if [ $num -gt 0 ]; then
echo "$num is positive"
elif [ $num -lt 0 ]; then
echo "$num is negative"
else
echo "$num is zero"
fi
স্ক্রিপ্টটি প্রথমে ব্যবহারকারীকে একটি সংখ্যা লিখতে অনুরোধ করে। তারপর, এটি একটি if ব্যবহার করে সংখ্যাটি 0-এর চেয়ে বড় কিনা তা পরীক্ষা করার জন্য বিবৃতি। যদি এটি হয়, স্ক্রিপ্টটি আউটপুট করে যে সংখ্যাটি ধনাত্মক। সংখ্যাটি 0-এর বেশি না হলে, স্ক্রিপ্টটি পরবর্তী বিবৃতিতে চলে যায়, যা একটি if-elif বিবৃতি এখানে, স্ক্রিপ্ট চেক করে যে সংখ্যাটি 0 এর কম কিনা। যদি এটি হয়, তাহলে স্ক্রিপ্টটি আউটপুট করে যে সংখ্যাটি নেতিবাচক। পরিশেষে, যদি সংখ্যাটি 0-এর বেশি বা 0-এর কম না হয়, তাহলে স্ক্রিপ্ট একটি else ব্যবহার করে আউটপুট করার বিবৃতি যে সংখ্যাটি শূন্য।
🚀
বাশে লুপিং এবং ব্রাঞ্চিং
লুপ করার সময়
লুপ করার সময় একটি শর্তের জন্য চেক করুন এবং শর্তটি true থাকা পর্যন্ত লুপ করুন . আমাদের একটি পাল্টা বিবৃতি প্রদান করতে হবে যা লুপ এক্সিকিউশন নিয়ন্ত্রণ করতে কাউন্টারকে বৃদ্ধি করে।
নীচের উদাহরণে, (( i += 1 )) কাউন্টার স্টেটমেন্ট যা i এর মান বৃদ্ধি করে . লুপ ঠিক 10 বার চলবে।
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
লুপের জন্য
for লুপ, ঠিক যেমন while লুপ, আপনাকে নির্দিষ্ট সংখ্যক বার স্টেটমেন্ট চালানোর অনুমতি দেয়। প্রতিটি লুপ তার সিনট্যাক্স এবং ব্যবহারে আলাদা।
নীচের উদাহরণে, লুপটি 5 বার পুনরাবৃত্তি করবে।
#!/bin/bash
for i in {1..5}
do
echo $i
done
কেস বিবৃতি
ব্যাশে, কেস স্টেটমেন্টগুলি প্যাটার্নের তালিকার সাথে একটি প্রদত্ত মান তুলনা করতে এবং মেলে প্রথম প্যাটার্নের উপর ভিত্তি করে কোডের একটি ব্লক কার্যকর করতে ব্যবহৃত হয়। ব্যাশে একটি কেস স্টেটমেন্টের সিনট্যাক্স নিম্নরূপ:
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
এখানে, "এক্সপ্রেশন" হল সেই মান যা আমরা তুলনা করতে চাই, এবং "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
এই উদাহরণে, যেহেতু "ফল" এর মান "আপেল" তাই প্রথম প্যাটার্নটি মিলে যায় এবং কোডের ব্লকটি প্রতিধ্বনিত হয় "এটি একটি লাল ফল।" মৃত্যুদন্ড কার্যকর করা হয়। যদি "ফল" এর মান "কলা" এর পরিবর্তে "কলা" হত, তবে দ্বিতীয় প্যাটার্নটি মিলত এবং কোডের ব্লকটি প্রতিধ্বনিত হবে "এটি একটি হলুদ ফল।" চালানো হবে, এবং তাই. যদি "ফল" এর মান নির্দিষ্ট প্যাটার্নগুলির সাথে মেলে না, তবে ডিফল্ট কেসটি কার্যকর করা হয়, যা "অজানা ফল" প্রতিধ্বনিত হয়।
ক্রন ব্যবহার করে কিভাবে স্ক্রিপ্ট নির্ধারণ করবেন
ক্রোন হল কাজের সময়সূচীর জন্য একটি শক্তিশালী ইউটিলিটি যা ইউনিক্স-এর মতো অপারেটিং সিস্টেমে উপলব্ধ। ক্রন কনফিগার করে, আপনি দৈনিক, সাপ্তাহিক, মাসিক বা নির্দিষ্ট সময়ের ভিত্তিতে চালানোর জন্য স্বয়ংক্রিয় কাজ সেট আপ করতে পারেন। ক্রোন দ্বারা প্রদত্ত অটোমেশন ক্ষমতাগুলি লিনাক্স সিস্টেম প্রশাসনে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে৷
নিচে সিনট্যাক্স করা হল ক্রন নির্ধারণ করার জন্য:
# Cron job example
* * * * * sh /path/to/script.sh
এখানে, * s যথাক্রমে মিনিট(গুলি) ঘন্টা(গুলি) দিন(গুলি) মাস(গুলি) সপ্তাহের দিন(গুলি) প্রতিনিধিত্ব করে৷
নীচে ক্রন কাজের সময় নির্ধারণের কিছু উদাহরণ রয়েছে৷
৷0 0 প্রতিদিন মাঝরাতে একটি স্ক্রিপ্ট চালান0 0 /path/to/script.sh /5 প্রতি 5 মিনিটে একটি স্ক্রিপ্ট চালান/5 /path/to/script.sh 0 6 1-5 সোমবার থেকে শুক্রবার সকাল 6টায় একটি স্ক্রিপ্ট চালান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 -l একটি নির্দিষ্ট ব্যবহারকারীর জন্য ইতিমধ্যে নির্ধারিত স্ক্রিপ্ট তালিকাভুক্ত করে।
আপনি crontab -e এর মাধ্যমে ক্রোন যোগ এবং সম্পাদনা করতে পারেন .
আপনি এখানে আমার অন্য নিবন্ধে ভুট্টার কাজ সম্পর্কে আরও পড়তে পারেন।
ব্যাশ স্ক্রিপ্টগুলি কীভাবে ডিবাগ এবং সমস্যা সমাধান করবেন
ডিবাগিং এবং ট্রাবলশুটিং যেকোনো ব্যাশ স্ক্রিপ্টারের জন্য অপরিহার্য দক্ষতা। যদিও ব্যাশ স্ক্রিপ্টগুলি অবিশ্বাস্যভাবে শক্তিশালী হতে পারে, তারা ত্রুটি এবং অপ্রত্যাশিত আচরণেরও প্রবণ হতে পারে। এই বিভাগে, আমরা ব্যাশ স্ক্রিপ্টগুলি ডিবাগিং এবং সমস্যা সমাধানের জন্য কিছু টিপস এবং কৌশল নিয়ে আলোচনা করব৷
set -x সেট করুন বিকল্প
ব্যাশ স্ক্রিপ্টগুলি ডিবাগ করার জন্য সবচেয়ে দরকারী কৌশলগুলির মধ্যে একটি হল set -x সেট করা স্ক্রিপ্টের শুরুতে বিকল্প। এই বিকল্পটি ডিবাগিং মোড সক্ষম করে, যার ফলে Bash প্রতিটি কমান্ড মুদ্রণ করে যা এটি টার্মিনালে এক্সিকিউট করে, তার আগে একটি + চিহ্ন আপনার স্ক্রিপ্টে কোথায় ত্রুটি ঘটছে তা সনাক্ত করতে এটি অবিশ্বাস্যভাবে সহায়ক হতে পারে৷
#!/bin/bash
set -x
# Your script goes here
প্রস্থান কোড চেক করুন
যখন Bash একটি ত্রুটির সম্মুখীন হয়, এটি একটি প্রস্থান কোড সেট করে যা ত্রুটির প্রকৃতি নির্দেশ করে। আপনি $? ব্যবহার করে সাম্প্রতিক কমান্ডের প্রস্থান কোড পরীক্ষা করতে পারেন পরিবর্তনশীল 0 এর একটি মান সাফল্য নির্দেশ করে, অন্য কোনো মান ত্রুটি নির্দেশ করে।
#!/bin/bash
# Your script goes here
if [ $? -ne 0 ]; then
echo "Error occurred."
fi
echo ব্যবহার করুন বিবৃতি
ব্যাশ স্ক্রিপ্টগুলি ডিবাগ করার জন্য আরেকটি দরকারী কৌশল হল echo সন্নিবেশ করা আপনার কোড জুড়ে বিবৃতি। এটি আপনাকে সনাক্ত করতে সাহায্য করতে পারে কোথায় ত্রুটি ঘটছে এবং কোন মানগুলি ভেরিয়েবলগুলিতে প্রেরণ করা হচ্ছে৷
#!/bin/bash
# Your script goes here
echo "Value of variable x is: $x"
# More code goes here
set -e ব্যবহার করুন বিকল্প
আপনি যদি স্ক্রিপ্টের যেকোনো কমান্ড ব্যর্থ হলে আপনার স্ক্রিপ্ট অবিলম্বে প্রস্থান করতে চান, আপনি set -e ব্যবহার করতে পারেন বিকল্প এই বিকল্পটি স্ক্রিপ্টের কোনো কমান্ড ব্যর্থ হলে একটি ত্রুটি সহ Bash প্রস্থান করবে, এটি আপনার স্ক্রিপ্টে ত্রুটি সনাক্ত করা এবং সংশোধন করা সহজ করে তোলে৷
#!/bin/bash
set -e
# Your script goes here
লগ যাচাই করে ক্রনের সমস্যা সমাধান করা হচ্ছে
আমরা লগ ফাইল ব্যবহার করে ক্রোন সমস্যা সমাধান করতে পারি। সমস্ত নির্ধারিত কাজের জন্য লগগুলি বজায় রাখা হয়। আপনি লগ ইন চেক এবং যাচাই করতে পারেন যদি একটি নির্দিষ্ট কাজ উদ্দেশ্য হিসাবে চালানো হয় বা না.
উবুন্টু/ডেবিয়ানের জন্য, আপনি cron খুঁজে পেতে পারেন লগ এ:
/var/log/syslog
অবস্থান অন্যান্য বিতরণের জন্য পরিবর্তিত হয়৷
একটি ক্রোন জব লগ ফাইল এইরকম দেখতে পারে:
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
উপসংহার
এই নিবন্ধে, আমরা কীভাবে টার্মিনাল অ্যাক্সেস করতে হয় তা দিয়ে শুরু করেছি এবং তারপরে কিছু মৌলিক ব্যাশ কমান্ড চালিয়েছি। আমরা একটি ব্যাশ শেল কি অধ্যয়ন. আমরা সংক্ষিপ্তভাবে লুপ এবং কন্ডিশনাল ব্যবহার করে কোড ব্রাঞ্চ করার দিকে তাকিয়েছি। অবশেষে, আমরা কিছু সমস্যা সমাধানের কৌশল অনুসরণ করে ক্রোন ব্যবহার করে স্ক্রিপ্টগুলি স্বয়ংক্রিয় করার বিষয়ে আলোচনা করেছি।
ব্যাশ স্ক্রিপ্টিং সম্পর্কে আরও শেখার জন্য সম্পদ
আপনি যদি ব্যাশ স্ক্রিপ্টিংয়ের জগতে আরও গভীরে যেতে চান, আমি আপনাকে ফ্রিকোডক্যাম্পে লিনাক্সের এই 6-ঘন্টার কোর্সটি একবার দেখার পরামর্শ দেব।
এই টিউটোরিয়াল থেকে আপনি শিখেছেন আপনার প্রিয় জিনিস কি? আপনি আমার সাথে এই প্ল্যাটফর্মগুলির যেকোনো একটিতে সংযোগ করতে পারেন। 📧�
পরবর্তী টিউটোরিয়ালে দেখা হবে, খুশি কোডিং 😁
ব্যানার ইমেজ ক্রেডিট:ফ্রীপিকের ছবি
বিনামূল্যে কোড শিখুন. freeCodeCamp-এর ওপেন সোর্স পাঠ্যক্রম 40,000-এরও বেশি লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন