Shell Scripting
শেল স্ক্রিপ্টিং
ভূমিকা
শেল স্ক্রিপ্টিং হল একটি শক্তিশালী প্রোগ্রামিং ভাষা যা লিনাক্স এবং অন্যান্য ইউনিক্স-ভিত্তিক অপারেটিং সিস্টেম-এ সিস্টেম অ্যাডমিনিস্ট্রেশন এবং অটোমেশনের জন্য ব্যবহৃত হয়। এটি মূলত কমান্ড-লাইন ইন্টারপ্রেটার বা শেল ব্যবহার করে লেখা প্রোগ্রাম। শেল স্ক্রিপ্টগুলি ব্যাচ প্রসেসিং, ফাইল ম্যানিপুলেশন, প্রোগ্রাম এক্সিকিউশন এবং আরও অনেক কাজের জন্য ব্যবহার করা যেতে পারে। এই নিবন্ধে, শেল স্ক্রিপ্টিংয়ের মৌলিক ধারণা, সিনট্যাক্স, এবং ব্যবহারিক প্রয়োগ সম্পর্কে বিস্তারিত আলোচনা করা হবে।
শেল কী?
শেল হল একটি কমান্ড-লাইন ইন্টারপ্রেটার যা ব্যবহারকারীকে অপারেটিং সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে দেয়। বিভিন্ন ধরনের শেল বিদ্যমান, যেমন bash, zsh, ksh, এবং csh। এদের মধ্যে bash (Bourne Again SHell) সবচেয়ে বেশি ব্যবহৃত হয়। শেল স্ক্রিপ্টিংয়ের জন্য bash একটি চমৎকার পছন্দ, কারণ এটি বহুলভাবে সমর্থিত এবং এতে অনেক উন্নত বৈশিষ্ট্য রয়েছে।
শেল স্ক্রিপ্টের মৌলিক কাঠামো
একটি শেল স্ক্রিপ্ট সাধারণত নিম্নলিখিত অংশগুলি নিয়ে গঠিত:
- শীব্যাং (Shebang): স্ক্রিপ্টের শুরুতে `#!` দিয়ে শুরু হওয়া একটি লাইন, যা নির্দেশ করে স্ক্রিপ্টটি কোন ইন্টারপ্রেটার ব্যবহার করে চালানো হবে। উদাহরণস্বরূপ, `#!/bin/bash` মানে স্ক্রিপ্টটি bash ব্যবহার করে চালানো হবে।
- কমেন্ট (Comment): `#` চিহ্ন দিয়ে শুরু হওয়া লাইনগুলি কমেন্ট হিসেবে বিবেচিত হয় এবং ইন্টারপ্রেটার এগুলি উপেক্ষা করে। কমেন্ট স্ক্রিপ্টের কার্যকারিতা ব্যাখ্যা করতে ব্যবহৃত হয়।
- কমান্ড (Command): শেল কমান্ডগুলি স্ক্রিপ্টের মূল অংশ, যা অপারেটিং সিস্টেমকে নির্দিষ্ট কাজ করার নির্দেশ দেয়।
- ভেরিয়েবল (Variable): ভেরিয়েবলগুলি ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।
- কন্ট্রোল স্ট্রাকচার (Control Structure): `if`, `else`, `for`, `while` ইত্যাদি কন্ট্রোল স্ট্রাকচারগুলি স্ক্রিপ্টের ফ্লো নিয়ন্ত্রণ করে।
প্রথম শেল স্ক্রিপ্ট
একটি সাধারণ "Hello, World!" প্রোগ্রাম লেখার মাধ্যমে শেল স্ক্রিপ্টিং শুরু করা যাক:
```bash
- !/bin/bash
- এটি একটি সাধারণ শেল স্ক্রিপ্ট
echo "Hello, World!" ```
এই স্ক্রিপ্টটি একটি ফাইলে (যেমন `hello.sh`) সংরক্ষণ করুন, তারপর `chmod +x hello.sh` কমান্ড ব্যবহার করে ফাইলটিকে এক্সিকিউটেবল করুন। এরপর `./hello.sh` কমান্ড দিয়ে স্ক্রিপ্টটি চালান।
ভেরিয়েবল
শেল স্ক্রিপ্টে ভেরিয়েবল ব্যবহার করে ডেটা সংরক্ষণ করা যায়। ভেরিয়েবলগুলি `=` চিহ্ন ব্যবহার করে অ্যাসাইন করা হয়।
```bash
- !/bin/bash
name="John Doe" echo "Hello, $name!" ```
এখানে, `name` একটি ভেরিয়েবল এবং এর মান "John Doe"। ভেরিয়েবলের মান অ্যাক্সেস করতে `$` চিহ্ন ব্যবহার করা হয়।
আর্গুমেন্ট
শেল স্ক্রিপ্টে কমান্ড-লাইন আর্গুমেন্ট পাস করা যায়। এই আর্গুমেন্টগুলি `$1`, `$2`, `$3` ইত্যাদি ব্যবহার করে অ্যাক্সেস করা যায়। `$0` স্ক্রিপ্টের নাম নির্দেশ করে।
```bash
- !/bin/bash
echo "স্ক্রিপ্টের নাম: $0" echo "প্রথম আর্গুমেন্ট: $1" echo "দ্বিতীয় আর্গুমেন্ট: $2" ```
এই স্ক্রিপ্টটি `script.sh arg1 arg2` এভাবে চালানো হলে প্রথম আর্গুমেন্ট `arg1` এবং দ্বিতীয় আর্গুমেন্ট `arg2` হবে।
কন্ট্রোল স্ট্রাকচার
শেল স্ক্রিপ্টে বিভিন্ন ধরনের কন্ট্রোল স্ট্রাকচার রয়েছে:
- `if` স্টেটমেন্ট: শর্তের উপর ভিত্তি করে কোড ব্লক চালানোর জন্য ব্যবহৃত হয়।
```bash
- !/bin/bash
num=10 if [ $num -gt 5 ]; then
echo "সংখ্যাটি ৫ এর চেয়ে বড়।"
fi ```
- `if-else` স্টেটমেন্ট: একটি শর্ত সত্য না হলে অন্য কোড ব্লক চালানোর জন্য ব্যবহৃত হয়।
```bash
- !/bin/bash
num=3 if [ $num -gt 5 ]; then
echo "সংখ্যাটি ৫ এর চেয়ে বড়।"
else
echo "সংখ্যাটি ৫ এর চেয়ে ছোট বা সমান।"
fi ```
- `for` লুপ: একটি নির্দিষ্ট সংখ্যক বার কোড ব্লক চালানোর জন্য ব্যবহৃত হয়।
```bash
- !/bin/bash
for i in 1 2 3 4 5; do
echo "সংখ্যা: $i"
done ```
- `while` লুপ: একটি শর্ত সত্য থাকা পর্যন্ত কোড ব্লক চালানোর জন্য ব্যবহৃত হয়।
```bash
- !/bin/bash
count=1 while [ $count -le 5 ]; do
echo "গণনা: $count" count=$((count + 1))
done ```
ফাংশন
শেল স্ক্রিপ্টে ফাংশন ব্যবহার করে কোডকে মডুলার করা যায়। ফাংশনগুলি একটি নির্দিষ্ট কাজ করে এবং স্ক্রিপ্টের মধ্যে একাধিকবার ব্যবহার করা যেতে পারে।
```bash
- !/bin/bash
- একটি ফাংশন যা একটি সংখ্যাকে প্রিন্ট করে
print_number() {
echo "সংখ্যা: $1"
}
print_number 10 print_number 20 ```
ফাইল ম্যানিপুলেশন
শেল স্ক্রিপ্টিং ব্যবহার করে ফাইল তৈরি, পড়া, লেখা এবং মুছে ফেলা যায়।
- ফাইল তৈরি: `touch filename`
- ফাইল পড়া: `cat filename`
- ফাইলে লেখা: `echo "text" > filename` (ওভাররাইট) অথবা `echo "text" >> filename` (অ্যাপেন্ড)
- ফাইল মুছে ফেলা: `rm filename`
ইনপুট এবং আউটপুট
শেল স্ক্রিপ্টে ব্যবহারকারীর কাছ থেকে ইনপুট নেওয়া এবং আউটপুট দেখানো যায়।
- ইনপুট নেওয়া: `read variable_name`
- আউটপুট দেখানো: `echo "text"`
উদাহরণস্বরূপ:
```bash
- !/bin/bash
read name echo "আপনার নাম: $name" ```
অ্যাডভান্সড শেল স্ক্রিপ্টিং
- রেগুলার এক্সপ্রেশন (Regular Expression): টেক্সট প্যাটার্ন ম্যাচিংয়ের জন্য ব্যবহৃত হয়। `grep`, `sed`, এবং `awk` এর মতো কমান্ডগুলিতে রেগুলার এক্সপ্রেশন ব্যবহার করা হয়। রেগুলার এক্সপ্রেশন
- পাইপিং (Piping): একটি কমান্ডের আউটপুটকে অন্য কমান্ডের ইনপুট হিসেবে ব্যবহার করার জন্য ব্যবহৃত হয়। `|` চিহ্ন পাইপিংয়ের জন্য ব্যবহৃত হয়। পাইপিং
- রিডাইরেকশন (Redirection): কমান্ডের আউটপুটকে ফাইলে বা অন্য কোনো স্থানে রিডাইরেক্ট করার জন্য ব্যবহৃত হয়। `>` এবং `<` চিহ্ন রিডাইরেকশনের জন্য ব্যবহৃত হয়। রিডাইরেকশন
- ব্যাকগ্রাউন্ড প্রসেস (Background Process): স্ক্রিপ্টটিকে ব্যাকগ্রাউন্ডে চালানোর জন্য `&` চিহ্ন ব্যবহার করা হয়। ব্যাকগ্রাউন্ড প্রসেস
- সিগন্যাল হ্যান্ডলিং (Signal Handling): স্ক্রিপ্টকে সিগন্যাল (যেমন `Ctrl+C`) গ্রহণ এবং প্রতিক্রিয়া জানানোর জন্য ব্যবহার করা হয়। সিগন্যাল হ্যান্ডলিং
- এরর হ্যান্ডলিং (Error Handling): স্ক্রিপ্টে অপ্রত্যাশিত ত্রুটিগুলি সনাক্ত এবং পরিচালনা করার জন্য ব্যবহৃত হয়। এরর হ্যান্ডলিং
ব্যবহারিক উদাহরণ
১. একটি ডিরেক্টরির সমস্ত ফাইলের তালিকা তৈরি করা:
```bash
- !/bin/bash
ls -l ```
২. একটি নির্দিষ্ট ফাইলের আকার নির্ণয় করা:
```bash
- !/bin/bash
file_size=$(stat -c %s filename) echo "ফাইলের আকার: $file_size বাইট" ```
৩. একটি ডিরেক্টরির সমস্ত `.txt` ফাইল খুঁজে বের করা:
```bash
- !/bin/bash
find . -name "*.txt" ```
৪. একটি ফাইলের প্রতিটি লাইনে নম্বর যোগ করা:
```bash
- !/bin/bash
nl filename ```
৫. একটি টেক্সট ফাইলের নির্দিষ্ট লাইন সংখ্যা প্রিন্ট করা:
```bash
- !/bin/bash
sed -n '5p' filename # ৫ম লাইন প্রিন্ট করবে ```
৬. একটি ফাইলের মধ্যে নির্দিষ্ট টেক্সট অনুসন্ধান করা:
```bash
- !/bin/bash
grep "search_term" filename ```
৭. একটি ফাইলের কন্টেন্ট পরিবর্তন করা:
```bash
- !/bin/bash
sed 's/old_text/new_text/g' filename > new_filename ```
৮. দুটি ফাইলের মধ্যে পার্থক্য বের করা:
```bash
- !/bin/bash
diff file1 file2 ```
৯. একটি ফাইলের ব্যাকআপ তৈরি করা:
```bash
- !/bin/bash
cp filename filename.bak ```
১০. একটি নির্দিষ্ট প্রক্রিয়া (process) বন্ধ করা:
```bash
- !/bin/bash
kill process_id ```
শেল স্ক্রিপ্টিং-এর সুবিধা
- অটোমেশন: পুনরাবৃত্তিমূলক কাজগুলি স্বয়ংক্রিয়ভাবে করার জন্য শেল স্ক্রিপ্ট ব্যবহার করা যায়।
- সময় সাশ্রয়: জটিল কাজগুলি সহজে এবং দ্রুত করার জন্য শেল স্ক্রিপ্ট ব্যবহার করা যায়।
- কাস্টমাইজেশন: ব্যবহারকারীর প্রয়োজন অনুযায়ী স্ক্রিপ্ট কাস্টমাইজ করা যায়।
- পোর্টেবিলিটি: শেল স্ক্রিপ্টগুলি বিভিন্ন ইউনিক্স-ভিত্তিক অপারেটিং সিস্টেমে চালানো যায়।
শেল স্ক্রিপ্টিং-এর অসুবিধা
- ডিবাগিং (Debugging): শেল স্ক্রিপ্টে ত্রুটি খুঁজে বের করা কঠিন হতে পারে।
- জটিলতা: বড় এবং জটিল স্ক্রিপ্টগুলি বোঝা এবং পরিচালনা করা কঠিন হতে পারে।
- নিরাপত্তা: ভুলভাবে লেখা স্ক্রিপ্টগুলি নিরাপত্তা ঝুঁকি তৈরি করতে পারে।
উপসংহার
শেল স্ক্রিপ্টিং একটি অপরিহার্য দক্ষতা সিস্টেম অ্যাডমিনিস্ট্রেটর এবং ডেভেলপারদের জন্য। এটি সিস্টেম অটোমেশন, ফাইল ম্যানিপুলেশন, এবং অন্যান্য প্রশাসনিক কাজের জন্য একটি শক্তিশালী হাতিয়ার। এই নিবন্ধে শেল স্ক্রিপ্টিংয়ের মৌলিক ধারণা এবং ব্যবহারিক প্রয়োগ সম্পর্কে আলোচনা করা হয়েছে। আরও উন্নত জ্ঞান অর্জনের জন্য, নিয়মিত অনুশীলন এবং বিভিন্ন রিসোর্স থেকে শেখা প্রয়োজন।
আরও জানতে:
- Bash Scripting Tutorial
- Advanced Bash-Scripting Guide
- Linux Command Line
- Regular Expressions
- Piping and Redirection
- Error Handling in Shell Scripting
- Shell Functions
- Shell Variable Types
- Process Management in Linux
- Text Processing with Sed and Awk
- File System Navigation
- User Management in Linux
- System Monitoring Tools
- Networking Commands
- Security Best Practices for Shell Scripting
- Shell Scripting for DevOps
- Automating System Administration Tasks
- Managing Logs with Shell Scripting
- Data Backup and Recovery with Shell Scripting
- Cron Jobs and Scheduling
এখনই ট্রেডিং শুরু করুন
IQ Option-এ নিবন্ধন করুন (সর্বনিম্ন ডিপোজিট $10) Pocket Option-এ অ্যাকাউন্ট খুলুন (সর্বনিম্ন ডিপোজিট $5)
আমাদের সম্প্রদায়ে যোগ দিন
আমাদের টেলিগ্রাম চ্যানেলে যোগ দিন @strategybin এবং পান: ✓ দৈনিক ট্রেডিং সংকেত ✓ একচেটিয়া কৌশলগত বিশ্লেষণ ✓ বাজারের প্রবণতা সম্পর্কে বিজ্ঞপ্তি ✓ নতুনদের জন্য শিক্ষামূলক উপকরণ