কম্পিউটার টিউটোরিয়াল

শেল প্রোগ্রামিং মাস্টার করুন: লিনাক্স নতুনদের জন্য ৫টি অত্যন্ত প্রয়োজনীয় Bash স্ক্রিপ্ট – পার্ট II

কিছু শিখতে হলে সেটি অবশ্যই করতে হবে, ব্যর্থ হওয়ার ভয় ছাড়া। আমি ব্যবহারিকতার পক্ষে আছি এবং তাই আপনাকে স্ক্রিপ্টিং ল্যাঙ্গুয়েজের ব্যবহারিক জগতে নিয়ে যাচ্ছি।

এই আর্টিকেলটি আমাদের প্রথম আর্টিকেল "লিনাক্স শেল এবং বেসিক শেল স্ক্রিপ্টিং বোঝা – পার্ট I"-র продовতা, যেখানে আমরা আপনাকে স্ক্রিপ্টিংর স্বাদ দিয়েছিলাম, সেই tradizione কায়ম রেখে এই আর্টিকেলটিও আপনাকে নিরাশ করবে না।

স্ক্রিপ্ট ১: বিশেষ প্যাট্রন আঁকা

#!/bin/bash
MAX_NO=0
echo -n "Enter Number between (5 to 9) : "
read MAX_NO
if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; then
    echo "WTF... I ask to enter number between 5 and 9, Try Again"
    exit 1
fi
clear
for (( i=1; i<=MAX_NO; i++ ))
do
    for (( s=MAX_NO; s>=i; s-- ))
    do
        echo -n " "
    done
    for (( j=1; j<=i; j++ ))
    do
        echo -n " ."
    done
    echo ""
done
###### Second stage ######################
for (( i=MAX_NO; i>=1; i-- ))
do
    for (( s=i; s<=MAX_NO; s++ ))
    do
        echo -n " "
    done
    for (( j=1; j<=i; j++ ))
    do
        echo -n " ."
    done
    echo ""
done
echo -e "\n\n\t\t\t Whenever you need help, Tecmint.com is always there"

উপরোক্ত অধিকাংশ কিওয়ার্ড আপনার পরিচিত হতে পারে এবং অধিকাংশ স্ব-ব্যাখ্যামূলক। যেমন, MAX ভেরিয়েবলের সর্বোচ্চ মান সেট করে, for হল একটি লুপ এবং লুপের ভিতরের যেকোনো কিছু দেওয়া ইনপুটের মান যতক্ষণ বৈধ থাকবে ততক্ষণ বারবার এক্সিকিউট হয়।

নমুনা আউটপুট

[admin@wsxdn.com ~]# chmod 755 Special_Pattern.sh
[admin@wsxdn.com ~]# ./Special_Pattern.sh
Enter Number between (5 to 9) : 6
 .
 . .
 . . .
 . . . .
 . . . . .
 . . . . . .
 . . . . .
 . . . .
 . . .
 . .
 .

		 Whenever you need help, Tecmint.com is always there

যদি আপনি যেকোনো প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পর্কে কিছুটা জানেন, তবে উপরের স্ক্রিপ্ট শিখতে কঠিন হবে না, এমনকি যদি আপনি কম্পিউটেশন, প্রোগ্রামিং এবং লিনাক্স-এ নতুন হন, তবুও এটি বেশি কঠিন হবে না।

Special_Pattern.sh ডাউনলোড করুন

স্ক্রিপ্ট ২: রঙিন স্ক্রিপ্ট তৈরি করা

কে বলে, লিনাক্স রঙহীন এবং নীরস? নিচের কোডগুলো যেকোনো [ডট] sh ফাইলে সংরক্ষণ করুন, এক্সিকিউটেবল করুন এবং চালান, ভুলবেন না কেমন লাগলে জানাতে, চিন্তা করুন কোথায় কোথায় এটি বাস্তবায়ন করা যায়।

#!/bin/bash
clear
echo -e "\033[1m Hello World" # bold effect
echo -e "\033[5m Blink" # blink effect
echo -e "\033[0m Hello World" # back to normal
echo -e "\033[31m Hello World" # Red color
echo -e "\033[32m Hello World" # Green color
echo -e "\033[33m Hello World" # See remaining on screen
echo -e "\033[34m Hello World"
echo -e "\033[35m Hello World"
echo -e "\033[36m Hello World"
echo -e -n "\033[0m" # back to normal
echo -e "\033[41m Hello World"
echo -e "\033[42m Hello World"
echo -e "\033[43m Hello World"
echo -e "\033[44m Hello World"
echo -e "\033[45m Hello World"
echo -e "\033[46m Hello World"
echo -e "\033[0m Hello World"

নোট: এখন রঙ কোডের চিন্তা ন করুন, যেগুলো আপনার জন্য গুরুত্বপূর্ণ সেগুলো ধীরে ধীরে আপনার জিহ্বায় চলে আসবে।

সতর্কতা: আপনার টার্মিনালে ব্লিংকিং সুবিধা নাও থাকতে পারে।

নমুনা আউটপুট

[admin@wsxdn.com ~]# chmod 755 Colorfull.sh
[admin@wsxdn.com ~]# ./Colorfull.sh
Hello World
Blink
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World

Colorfull.sh ডাউনলোড করুন

স্ক্রিপ্ট ৩: ফাইল/ডিরেক্টরি এনক্রিপ্ট করা

এই স্ক্রিপ্টটি একটি ফাইল এনক্রিপ্ট করবে (ইন মনে রাখবেন? ডিরেক্টরি/ড্রাইভার/.... লিনাক্সে সব কিছু ফাইল হিসেবে বিবেচিত হয়)। উপরের স্ক্রিপ্টের বর্তমান সীমাবদ্ধতা হল এটি TAB ব্যবহার করে নামের অটো-কমপ্লিশন সমর্থন করে না। കൂടে, স্ক্রিপ্টটি এবং এনক্রিপ্ট করার ফাইলটি একই ফোল্ডারে রাখতে হয়। প্রয়োজনে " pinentry-gui " ইনস্টল করতে হতে পারে, yum বা apt প্যাকেজ ব্যবহার করে।

[admin@wsxdn.com ~]# yum install pinentry-gui
[admin@wsxdn.com ~]# apt-get install pinentry-gui

"Encrypt.sh" নামে একটি ফাইল তৈরি করুন এবং নিচের স্ক্রিপ্টটি রাখুন, এক্সিকিউটেবল করুন এবং নিচে দেখানো şekilde চালান।

#!/bin/bash
echo "Welcome, I am ready to encrypt a file/folder for you"
echo "currently I have a limitation, Place me to thh same folder, where a file to be encrypted is present"
echo "Enter the Exact File Name with extension"
read file;
gpg -c $file
echo "I have encrypted the file successfully..."
echo "Now I will be removing the original file"
rm -rf $file

নমুনা আউটপুট

[admin@wsxdn.com ~]# chmod 755 Encrypt.sh
[admin@wsxdn.com ~]# ./Encrypt.sh
Welcome, I am ready to encrypt a file/folder for you
currently I have a limitation, Place me to the same folder, where a file to be encrypted is present
Enter the Exact File Name with extension
package.xml
┌─────────────────────────────────────────────────────┐
│ Enter passphrase                                    │
│                                                     │
│                                                     │
│ Passphrase *******_________________________________ │
│                                                     │
│                                         │
└─────────────────────────────────────────────────────┘
Please re-enter this passphrase
┌─────────────────────────────────────────────────────┐
│ Please re-enter this passphrase                     │
│                                                     │
│                                                     │
│ Passphrase ********________________________________ │
│                                                     │
│                                         │
└─────────────────────────────────────────────────────┘
I have encrypted the file successfully...
Now I will be removing the original file

gpg -c : এটি একটি পাসকি বা পাসওয়ার্ড ব্যবহার করে আপনার ফাইল এনক্রিপ্ট করবে। এই শেখার প্রক্রিয়ায় আপনি কখনো ভাবতেন না যে實際 প্রক্রিয়া এতটাই সহজ হতে পারে। তাহলে একটি ফাইল এনক্রিপ্ট করার পর আপনার কী দরকার? স্পষ্টই! ফাইলটি ডিক্রিপ্ট করা। এবং আমি চাই আপনি – শেখক, পাঠক – নিজে ডিক্রিপশন স্ক্রিপ্টটি লিখুন, চিন্তা করবেন না আমি আপনাকে মাঝপথে ছেড়ে দিচ্ছি না, আমি শুধু চাই আপনি এই আর্টিকেল থেকে কিছু লাভ করুন।

নোট: gpg -d filename.gpg > filename হলো আপনার ডিক্রিপশন স্ক্রিপ্টে বাস্তবায়ন করতে হবে। আপনি সফল হলে আপনার স্ক্রিপ্ট কমেন্টে পোস্ট করতে পারেন, না হলে আমাকে লিখতে বলতে পারেন।

Encrypt.sh ডাউনলোড করুন

স্ক্রিপ্ট ৪: সার্ভার ইউটিলাইজেশন চেক করা

সার্ভার ইউটিলাইজেশন চেক করা একটি অ্যাডমিনিস্ট্রেটরের গুরুত্বপূর্ণ কাজের একটি, এবং একজন ভাল অ্যাডমিনিস্ট্রেটর সে যিনি জানেন কিভাবে তার দিনচরյাগত কাজগুলি অটোমেট করতে হয়। নিচের স্ক্রিপ্টটি আপনার সার্ভার সম্পর্কে অনেক এমন তথ্য দেবে। নিজে চেক করে দেখুন।

#!/bin/bash
date; echo "uptime:" uptime
echo "Currently connected:" w
echo "--------------------"
echo "Last logins:" last -a |head -3
echo "--------------------"
echo "Disk and memory usage:"
df -h | xargs | awk '{print "Free/total disk: " $11 " / " $9}'
free -m | xargs | awk '{print "Free/total memory: " $17 " / " $8 " MB"}'
echo "--------------------"
start_log=`head -1 /var/log/messages |cut -c 1-12`
oom=`grep -ci kill /var/log/messages`
echo -n "OOM errors since $start_log :" $oom
echo ""
echo "--------------------"
echo "Utilization and most expensive processes:"
top -b |head -3
echo top -b |head -10 |tail -4
echo "--------------------"
echo "Open TCP ports:"
nmap -p- -T4 127.0.0.1
echo "--------------------"
echo "Current connections:"
ss -s
echo "--------------------"
echo "processes:"
ps auxf --width=200
echo "--------------------"
echo "vmstat:"
vmstat 1 5

নমুনা আউটপুট

[admin@wsxdn.com ~]# chmod 755 Server-Health.sh
[admin@wsxdn.com ~]# ./Server-Health.sh
Tue Jul 16 22:01:06 IST 2013
uptime: 22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
Currently connected:
22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
USER TTY FROM admin@wsxdn.com IDLE JCPU PCPU WHAT
tecmint pts/0 116.72.134.162 21:48 0.00s 0.03s 0.03s sshd: tecmint [priv]
--------------------
Last logins:
tecmint pts/0 Tue Jul 16 21:48 still logged in 116.72.134.162
tecmint pts/0 Tue Jul 16 21:24 - 21:43 (00:19) 116.72.134.162
--------------------
Disk and memory usage:
Free/total disk: 292G / 457G
Free/total memory: 3510 / 3838 MB
--------------------
OOM errors since Jul 14 03:37 : 0
--------------------
Utilization and most expensive processes:
top - 22:01:07 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18
Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.3%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 3788 1128 932 S 0.0 0.0 0:32.94 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:14.07 migration/0

নোট: আমি আপনাকে টার্মিনালে আউটপুট দেওয়া স্ক্রিপ্টটি দিয়েছি, ভবিষ্যতের রেফারেন্সের জন্য আউটপুট একটি ফাইলে পাওয়ার কথা কেমন লাগে? রিডাইরেক্ট অপারেটর ব্যবহার করে এটি বাস্তবায়ন করুন।

  1. > : রিডাইরেকশন অপারেটর একটি ফাইল তৈরি করে, এবং যদি এটি ইতিমধ্যে থাকা থাকে, তবে কন্টেন্ট ওভাররাইট হয়।
  2. >> : যখন আপনি >> ব্যবহার করেন, আপনি তথ্য যোগ করছেন, প্রতিস্থাপন করছেন না।
  3. >> >-এর চেয়ে নিরাপদ।

Server-Health.sh ডাউনলোড করুন

স্ক্রিপ্ট ৫: ডিস্ক স্পেস চেক করে ইমেইল ألার্ট পাঠানো

যখন পার্টিশন PART-এ ডিস্ক ব্যবহার সর্বোচ্চ অনুমোদিত সীমার চেয়ে বেশি হলে ইমেইল পাওয়া কেমন লাগে? এটি ছোট সা সংশোধন নিয়ে ওয়েব অ্যাডমিনিস্ট্রেটরদের জন্য জীবনরক্ষাকারী স্ক্রিপ্ট।

MAX=95
admin@wsxdn.com
PART=sda1
USE=`df -h |grep $PART | awk '{ print $5 }' | cut -d'%' -f1`
if [ $USE -gt $MAX ]; then
    echo "Percent used: $USE" | mail -s "Running out of disk space" $EMAIL
fi

নোট: "USER" আপনার ইউজার নাম দিয়ে প্রতিস্থাপন করুন। আপনি mail কমান্ড ব্যবহার করে মেইল চেক করতে পারেন।

Check-Disk-Space.sh ডাউনলোড করুন

স্ক্রিপ্ট লিখা এবং প্রোগ্রামিং সীমাহীন, যেকোনো কিছু প্রয়োজন অনুযায়ী বাস্তবায়ন করা যেতে পারে। আজ এপর্যন্ত। আমার পরবর্তী আর্টিকেলে আমি স্ক্রিপ্টিংর কিছু ভিন্ন স্বাদ দেব। তখন পর্যন্ত শান্ত থাকুন এবং টিউন্ড থাকুন, উপভোগ করুন।

  1. লিনাক্স শেল স্ক্রিপ্টিং: ভেরিয়েবল নিয়ে গভীরে দৃষ্টিপাত – পার্ট ৯

  2. ভিমে বাশ স্ক্রিপ্ট হেডার অটোমেট করুন: সহজ কাস্টম টেমপ্লেট সেটআপ

  3. মাস্টার বাশ স্ক্রিপ্টিং: বিশ্বস্ত লিনাক্স অটোমেশনের জন্য ১০ অপরিহার্য টিপস

  4. ShellCheck: বাশ স্ক্রিপ্টের ত্রুটি সনাক্ত ও সংশোধন করুন রিয়েল-টাইম সতর্কতা ও সুপারিশের সাথে