শেল স্ক্রিপ্ট তৈরি করা হল সবচেয়ে প্রয়োজনীয় দক্ষতাগুলির মধ্যে একটি যা লিনাক্স ব্যবহারকারীদের তাদের আঙুলের ডগায় থাকা উচিত। শেল স্ক্রিপ্টগুলি পুনরাবৃত্তিমূলক কাজগুলিকে স্বয়ংক্রিয় করতে একটি বিশাল ভূমিকা পালন করে যা অন্যথায় লাইন দ্বারা লাইন চালানো ক্লান্তিকর হবে৷
এই টিউটোরিয়ালে, আমরা কিছু মৌলিক শেল স্ক্রিপ্টিং অপারেশন হাইলাইট করি যা প্রতিটি লিনাক্স ব্যবহারকারীর থাকা উচিত।
1. একটি সাধারণ শেল স্ক্রিপ্ট তৈরি করুন
একটি শেল স্ক্রিপ্ট হল একটি ফাইল যা ASCII নিয়ে গঠিত পাঠ্য আমরা একটি সাধারণ শেল স্ক্রিপ্ট তৈরি করে শুরু করব এবং এটি করার জন্য, আমরা একটি পাঠ্য সম্পাদক ব্যবহার করব। কমান্ড-লাইন এবং জিইউআই-ভিত্তিক উভয় ধরনের টেক্সট এডিটর রয়েছে। এই গাইডের জন্য, আমরা ভিম এডিটর ব্যবহার করব।
আমরা একটি সাধারণ স্ক্রিপ্ট তৈরি করে শুরু করব যা “হ্যালো ওয়ার্ল্ড প্রদর্শন করে " যখন মৃত্যুদন্ড কার্যকর করা হয়৷
৷$ vim hello.sh
ফাইলে নিম্নলিখিত বিষয়বস্তু পেস্ট করুন এবং সংরক্ষণ করুন৷
৷#!/bin/bash # Print Hello world message echo "Hello World!"
চলুন শেল স্ক্রিপ্ট লাইনে লাইনে যাই।
- প্রথম লাইন -
#!/bin/bash
- শেবাং হেডার নামে পরিচিত। এটি একটি বিশেষ গঠন যা নির্দেশ করে যে স্ক্রিপ্টটি ব্যাখ্যা করতে কোন প্রোগ্রাম ব্যবহার করা হবে। এই ক্ষেত্রে, এটি হবে bash শেল /bin/bash দ্বারা নির্দেশিত . অন্যান্য স্ক্রিপ্টিং ভাষা আছে যেমন পাইথন যা#!/usr/bin/python3
দ্বারা চিহ্নিত করা হয় এবং পার্ল যার শেবাং হেডার#!/usr/bin/perl
দ্বারা চিহ্নিত করা হয় . - দ্বিতীয় লাইনটি একটি মন্তব্য। একটি মন্তব্য হল একটি বিবৃতি যা বর্ণনা করে যে একটি শেল স্ক্রিপ্ট কী করে এবং স্ক্রিপ্টটি চালানো হলে তা কার্যকর করা হয় না। মন্তব্যের আগে সবসময় হ্যাশ চিহ্ন
#
থাকে . - শেষ লাইনটি হল সেই কমান্ড যা 'হ্যালো ওয়ার্ল্ড প্রিন্ট করে টার্মিনালে বার্তা।
পরবর্তী ধাপ হল chmod ব্যবহার করে এক্সিকিউট পারমিশন বরাদ্দ করে স্ক্রিপ্টটিকে এক্সিকিউটেবল করা দেখানো হিসাবে কমান্ড।
$ chmod +x hello.sh
অবশেষে, যেকোনো একটি কমান্ড ব্যবহার করে শেল স্ক্রিপ্ট চালান:
$ bash hello.sh OR $ ./hello.sh
2. কোড এক্সিকিউট করতে শর্তসাপেক্ষ বিবৃতি ব্যবহার করা
অন্যান্য প্রোগ্রামিং ভাষার মতো, শর্তসাপেক্ষ বিবৃতি বাশ স্ক্রিপ্টিং-এ ব্যবহার করা হয় সিদ্ধান্ত নেওয়ার জন্য, সিনট্যাক্সে সামান্য পরিবর্তনের সাথে। আমরা যদি কভার করতে যাচ্ছি , যদি-অন্যথায়, এবং elif শর্তসাপেক্ষ বিবৃতি।
ইফ স্টেটমেন্টের উদাহরণ
যদি বিবৃতি একক বা একাধিক শর্ত পরীক্ষা করতে ব্যবহার করা যেতে পারে। আমরা if এর মৌলিক ব্যবহার দিয়ে শুরু করব একটি একক শর্ত পরীক্ষা করার জন্য বিবৃতি। যদি বিবৃতি if ... fi
দ্বারা সংজ্ঞায়িত করা হয় ব্লক।
if command then statement fi
আসুন নীচের শেল স্ক্রিপ্টটি দেখে নেওয়া যাক।
#!/bin/bash echo 'Enter the score' read x if [[ $x == 70 ]]; then echo 'Good job!' fiপ্রতিধ্বনি করুন
উপরের শেল স্ক্রিপ্টটি ব্যবহারকারীকে একটি স্কোর প্রদান করতে অনুরোধ করে যা তারপর একটি পরিবর্তনশীল x এ সংরক্ষণ করা হয় . যদি স্কোর 70 এর সাথে মিলে যায় , স্ক্রিপ্ট আউটপুট প্রদান করে “ভাল কাজ! ” তুলনা অপারেটর ==
স্কোর প্রবেশ করানো হয়েছে কিনা তা পরীক্ষা করতে ব্যবহৃত হয়, যা x ভেরিয়েবলে সংরক্ষণ করা হয় , 100 এর সমতুল্য .
অন্যান্য তুলনা অপারেটর আপনি ব্যবহার করতে পারেন অন্তর্ভুক্ত:
-eq
- সমান-ne
- সমান নয়-lt
- এর চেয়ে কম-le
- এর থেকে কম বা সমান-lt
- এর চেয়ে কম-ge
– এর চেয়ে বড় বা সমান
উদাহরণস্বরূপ, if-statement নিচের ব্লকটি প্রিন্ট আউট করে 'Worder hard ’ যদি ইনপুট স্কোর 50-এর কম কোনো মান হয় .
if [[ $x -lt 50 ]]; then echo 'Work Harder!' fiইকো করুন
একটি if-else স্টেটমেন্টের উদাহরণ
এমন পরিস্থিতিতে যেখানে আপনার 2টি সম্ভাব্য ফলাফল রয়েছে:- এটি হোক বা সেটি - যদি-অন্যথা বিবৃতিটি কাজে আসে৷
if command then statement1 else statement2 fi
নীচের স্ক্রিপ্টটি ইনপুট স্কোর পড়ে এবং এটি 70-এর চেয়ে বড় বা সমান কিনা তা পরীক্ষা করে .
যদি স্কোর 70 এর থেকে বেশি বা সমান হয় , আপনি একটি ‘দারুণ চাকরি, আপনি পাস করেছেন! পাবেন 'বার্তা। যাইহোক, যদি স্কোর 70 এর নিচে পড়ে , আউটপুট 'আপনি ব্যর্থ ' ছাপা হবে৷
৷#!/bin/bash echo 'Enter the score' read x if [[ $x -ge 70 ]]; then echo 'Great job, You passed!' else echo 'You failed' fiপ্রতিধ্বনি কর
একটি if-elif-else স্টেটমেন্টের উদাহরণ
এমন পরিস্থিতিতে যেখানে একাধিক শর্ত এবং বিভিন্ন ফলাফল রয়েছে, if-elif-else বিবৃতি ব্যবহার করা হয়। এই বিবৃতিটি নিম্নলিখিত বিন্যাস গ্রহণ করে৷
if condition1 then statement1 elif condition2 then statement2 else statement3 fi
উদাহরণস্বরূপ, আমাদের কাছে একটি লটারির জন্য একটি স্ক্রিপ্ট আছে যা পরীক্ষা করে যে নম্বরটি প্রবেশ করানো হয় 90 , 60 অথবা 30 .
#!/bin/bash echo 'Enter the score' read x if [[ $x -eq 90 ]]; then echo “You have won the First Prize” elif [[ $x -eq 60 ]]; then echo “You have won the Second Prize” elif [[ $x -eq 30 ]]; then echo “You have won the Second Prize” else echo “Please try again” fi
3. AND লজিকের সাথে If স্টেটমেন্ট ব্যবহার করা
আপনি যদি ব্যবহার করতে পারেন৷ AND বরাবর বিবৃতি লজিক অপারেটর একটি টাস্ক কার্যকর করতে যদি দুটি শর্ত সন্তুষ্ট হয়। &&
AND বোঝাতে অপারেটর ব্যবহার করা হয় যুক্তি।
#!/bin/bash echo 'Please Enter your user_id' read user_id echo 'Please Enter your tag_no' read tag_id if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]]; then echo “Login successful” else echo “Login failure” fi
5. OR লজিক
সহ If স্টেটমেন্ট ব্যবহার করা
OR ব্যবহার করার সময় যুক্তি, যা ||
দ্বারা উপস্থাপিত হয় প্রতীক, প্রত্যাশিত ফলাফল দেওয়ার জন্য যেকোন একটি শর্তকে স্ক্রিপ্টের সাথে সন্তুষ্ট করতে হবে।
#!/bin/bash echo 'Please enter a random number' read number if [[ (number -eq 55 || number -eq 80) ]]; then echo 'Congratulations! You’ve won' else echo 'Sorry, try again' fiপ্রতিধ্বনি করবেন
লুপিং কনস্ট্রাক্ট ব্যবহার করুন
ব্যাশ লুপস একটি নির্দিষ্ট ফলাফল অর্জন না হওয়া পর্যন্ত ব্যবহারকারীদের একটি সিরিজ কাজ সম্পাদন করার অনুমতি দেয়। এটি পুনরাবৃত্তিমূলক কাজ সম্পাদনে কাজে আসে। এই বিভাগে, আমরা কিছু লুপ দেখতে পাব যা আপনি অন্যান্য প্রোগ্রামিং ভাষায়ও পাবেন।
লুপ করার সময়
এটি কাজ করার জন্য সবচেয়ে সহজ লুপগুলির মধ্যে একটি। সিনট্যাক্সটি বেশ সহজ:
while <some test> do commands done
যখন কার্যকর করা হয় তখন নিচের লুপটি 1 থেকে 10 পর্যন্ত সমস্ত সংখ্যা তালিকাভুক্ত করে৷
#!/bin/bash # A simple while loop counter=1 while [ $counter -le 10 ] do echo $counter ((counter++)) done
আসুন যখন লুপ নিয়ে আলোচনা করি:
পরিবর্তনশীল কাউন্টার 1 তে আরম্ভ করা হয়েছে৷ . এবং যখন ভেরিয়েবলটি 10 এর থেকে কম বা সমান , শর্ত সন্তুষ্ট না হওয়া পর্যন্ত কাউন্টারের মান বৃদ্ধি করা হবে। লাইনটি প্রতিধ্বনি $counter 1 থেকে 10 পর্যন্ত সমস্ত সংখ্যা প্রিন্ট করে।
লুপের জন্য
যেমন সময় লুপ , একটি লুপের জন্য কোডটি পুনরাবৃত্তিমূলকভাবে চালানোর জন্য ব্যবহৃত হয়। অর্থাৎ ব্যবহারকারী দ্বারা সংজ্ঞায়িত যতবার সম্ভব কোড এক্সিকিউশন পুনরাবৃত্তি করুন।
সিনট্যাক্স হল:
for var in 1 2 3 4 5 N do command1 command2 done
লুপের জন্য নীচে 1 থেকে 10 পর্যন্ত পুনরাবৃত্ত হয় এবং স্ক্রিনে তাদের মানগুলি প্রক্রিয়া করে৷
এটি অর্জন করার একটি ভাল উপায় হল ডাবল কোঁকড়া ধনুর্বন্ধনী { }
ব্যবহার করে একটি পরিসর নির্ধারণ করা সমস্ত সংখ্যা টাইপ করার পরিবর্তে দেখানো হয়েছে।
#!/bin/bash # Specify range in a for loop for num in {1..10} do echo $num done
ব্যাশ পজিশনাল প্যারামিটার
একটি অবস্থানগত প্যারামিটার হল একটি বিশেষ পরিবর্তনশীল যা স্ক্রিপ্টে উল্লেখ করা হয় যখন শেলের উপর মানগুলি পাস করা হয় কিন্তু বরাদ্দ করা যায় না। অবস্থানগত প্যারামিটারগুলি $0 $1 $2 $3 থেকে চলে …… থেকে $9 . $9 ছাড়িয়ে মান, প্যারামিটারগুলিকে কোঁকড়া বন্ধনীতে আবদ্ধ করতে হবে যেমন ${10}, ${11} … ইত্যাদি।
স্ক্রিপ্ট চালানোর সময়, প্রথম অবস্থানগত প্যারামিটার যা $0 শেল স্ক্রিপ্টের নাম নেয়। $1 প্যারামিটারটি প্রথম পরিবর্তনশীলটি নেয় যা টার্মিনালে পাস করা হয়, $2 দ্বিতীয় লাগে, $3 তৃতীয় এবং তাই।
আসুন দেখানো হিসাবে একটি স্ক্রিপ্ট test.sh তৈরি করি।
#!/bin/bash echo "The name of the script is: " $0 echo "My first name is: " $1 echo "My second name is: " $2
এরপর, স্ক্রিপ্টটি চালান এবং আর্গুমেন্ট হিসাবে প্রথম এবং দ্বিতীয় নাম প্রদান করুন:
# bash test.sh James Kiarie
আউটপুট থেকে, আমরা দেখতে পাচ্ছি যে প্রথম ভেরিয়েবলটি প্রিন্ট করা হয় শেল স্ক্রিপ্টের নাম, এই ক্ষেত্রে, test.sh . তারপরে, শেল স্ক্রিপ্টে সংজ্ঞায়িত অবস্থানগত পরামিতিগুলির সাথে সামঞ্জস্য রেখে নামগুলি প্রিন্ট করা হয়৷
অবস্থানগত পরামিতিগুলি কার্যকর যে তারা আপনাকে একটি ভেরিয়েবলকে স্পষ্টভাবে একটি মান নির্ধারণের পরিবর্তে প্রবেশ করানো ডেটা কাস্টমাইজ করতে সহায়তা করে৷
শেল কমান্ড প্রস্থান কোড
চলুন একটি সহজ প্রশ্নের উত্তর দিয়ে শুরু করা যাক, একটি প্রস্থান কোড কি ?
ব্যবহারকারী বা শেল স্ক্রিপ্ট দ্বারা শেল এ নির্বাহিত প্রতিটি কমান্ডের একটি প্রস্থান অবস্থা আছে। একটি প্রস্থান অবস্থা একটি পূর্ণসংখ্যা।
0-এর প্রস্থান অবস্থা নির্দেশ করে যে কমান্ডটি কোনো ত্রুটি ছাড়াই সফলভাবে কার্যকর হয়েছে। 1 থেকে 255 এর মধ্যে যেকোনো কিছু দেখায় যে কমান্ড ব্যর্থ হয়েছে বা সফলভাবে কার্যকর হয়নি৷
একটি কমান্ডের প্রস্থান অবস্থা খুঁজে পেতে, $?
ব্যবহার করুন শেল পরিবর্তনশীল।
1 পয়েন্টের একটি প্রস্থান স্থিতি একটি সাধারণ ত্রুটি বা যেকোন অননুমোদিত ত্রুটি যেমন sudo অনুমতি ছাড়া ফাইল সম্পাদনা করা।
একটি কমান্ড বা বিল্টইন শেল ভেরিয়েবলের ভুল ব্যবহারের জন্য 2 পয়েন্টের একটি প্রস্থান অবস্থা৷
127 এক্সিট স্ট্যাটাস একটি অবৈধ কমান্ডের দিকে নির্দেশ করে যা সাধারণত 'কমান্ড পাওয়া যায়নি দেয়। ' ত্রুটি৷
৷একটি স্ক্রিপ্টের মধ্যে শেল কমান্ডের আউটপুট প্রক্রিয়াকরণ
ব্যাশ স্ক্রিপ্টিং-এ, আপনি ভবিষ্যতে ব্যবহারের জন্য একটি ভেরিয়েবলে একটি কমান্ডের আউটপুট সংরক্ষণ করতে পারেন। এটিকে শেল কমান্ড প্রতিস্থাপন হিসাবেও উল্লেখ করা হয় এবং নিম্নলিখিত উপায়ে এটি অর্জন করা যেতে পারে।
variable=$(command) OR variable=$(/path/to/command) OR variable=$(command argument 1 argument 2 ...)
উদাহরণস্বরূপ, আপনি তারিখ সংরক্ষণ করতে পারেন আজ নামে একটি ভেরিয়েবলের কমান্ড এবং বর্তমান তারিখ প্রকাশ করতে শেল স্ক্রিপ্টে কল করুন।
#!/bin/bash today=$(date) echo “Today is $today”
আরেকটি উদাহরণ নেওয়া যাক। ধরুন আপনি আপনার লিনাক্স সিস্টেমে বৈধ লগইন ব্যবহারকারীদের খুঁজে পেতে চান। আপনি এটি সম্পর্কে কিভাবে যেতে হবে? প্রথমত, সমস্ত ব্যবহারকারীর তালিকা (উভয় সিস্টেম, প্রক্রিয়া এবং লগইন ব্যবহারকারী) /etc/passwd-এ সংরক্ষণ করা হয় ফাইল।
ফাইলটি দেখতে, আপনাকে cat কমান্ড ব্যবহার করতে হবে। যাইহোক, ব্যবহারকারীদের লগ ইন করার জন্য সংকুচিত করতে, /bin/bash এর সাথে ব্যবহারকারীদের অনুসন্ধান করতে grep কমান্ডটি ব্যবহার করুন বৈশিষ্ট্য এবং cut -c 1-10 ব্যবহার করুন নামের প্রথম 10টি অক্ষর প্রদর্শনের জন্য দেখানো কমান্ড।
আমরা cat কমান্ড সংরক্ষণ করেছি লগইন_ব্যবহারকারীদের কাছে পরিবর্তনশীল।
#!/bin/bash login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10) echo 'This is the list of login users: echo $login_users
এটি সাধারণ শেল স্ক্রিপ্ট তৈরির বিষয়ে আমাদের টিউটোরিয়ালকে শেষ করে দেয়। আমরা আশা করি আপনি এটি মূল্যবান খুঁজে পেয়েছেন৷