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

ব্যাশ স্ক্রিপ্টিং মাস্টার করুন: ৫টি রিয়েল-ওয়ার্ল্ড উদাহরণসহ প্র্যাক্টিক্যাল ইন্ট্রোডাকশন

ব্যাশ স্ক্রিপ্টিং মাস্টার করুন: ৫টি রিয়েল-ওয়ার্ল্ড উদাহরণসহ প্র্যাক্টিক্যাল ইন্ট্রোডাকশনআমাদের চলমান Unix Sed এবং Unix Awk সিরিজের মতো, আমরা ব্যাশ স্ক্রিপ্টিং-এ বেশ কিছু আর্টিকেল পোস্ট করব, যেটি সকল ব্যাশ স্ক্রিপ্টিং টেকনিক প্র্যাক্টিক্যাল উদাহরণসহ কভার করবে।

শেল হলো একটি প্রোগ্রাম, যা ইউজার কমান্ড ইন্টারপ্রেট করে। কমান্ডগুলো হয় সরাসরি ইউজার দ্বারা দেয়া হয় অথবা শেল স্ক্রিপ্ট নামে একটি ফাইল থেকে পড়া হয়।

শেলকে ইন্টারেক্টিভ শেল বলা হয়, যখন এটি ইউজার থেকে সরাসরি ইনপুট পড়ে।

শেলকে নন-ইন্টারেক্টিভ শেল বলা হয়, যখন এটি একটি ফাইল থেকে কমান্ড পড়ে এবং এক্সিকিউট করে। এই ক্ষেত্রে, শেল স্ক্রিপ্ট ফাইলের প্রতিটি লাইন উপর থেকে নিচে পড়ে, এবং প্রতিটি কমান্ড এক্সিকিউট করে যেন সেটি সরাসরি ইউজার দ্বারা টাইপ করা হয়।

বিল্ট-ইন শেল ভেরিয়েবল $- এর মান প্রিন্ট করুন, জানতে শেল ইন্টারেক্টিভ নন-ইন্টারেক্টিভ কিনা।

# echo $- himBH

নোট: $- ভেরিয়েবলে “i” থাকে যখন শেল ইন্টারেক্টিভ।

ইউনিক্সে রকম শেল রয়েছে। বোর্ন শেল (sh), বোর্ন অ্যगेন শেল (bash), সি শেল (csh), কোর্ণ শেল (ksh), টেনেক্স সি শেল (tcsh)। which বা whereis ইউনিক্স কমান্ড ব্যবহার করে কোনো নির্দিষ্ট শেল কোথায় লোকেটেড সেটা জানুন নিচের মত।

# which bash /bin/bash # whereis bash bash: /bin/bash /usr/share/man/man1/bash.1.gz

শেলের নাম টাইপ করে শেলগুলোতে সুইচ করা যায়। উদাহরণস্বরূপ, csh টাইপ করলে সি শেলে সুইচ হবে।

শেল স্ক্রিপ্ট লেখা এবং এক্সিকিউশন

উদাহরণ ১. Hello World Bash Script

  1. নিচের দুটি লাইন আপনার প্রিয় এডিটর ব্যবহার করে একটি ফাইলে টাইপ করে একটি স্ক্রিপ্ট তৈরি করুন।
  2. $ cat helloworld.sh #!/bin/bash echo Hello World
  3. ফাইলের জন্য যেকোনো নাম বেছে নিতে পারেন। ফাইলনেম যেকোনো ইউনিক্স বিল্ট-ইন কমান্ডের মতো হওয়া উচিত নয়।
  4. স্ক্রিপ্ট সবসময় দুটি ক্যারেক্টার ‘#!’ দিয়ে শুরু হয় যাকে she-bang বলা হয়। এটি ইঙ্গিত করে যে ফাইলটি একটি স্ক্রিপ্ট, এবং ফাইলের প্রথম লাইনের বাকি অংশে নির্দিষ্ট ইন্টারপ্রেটার (/bin/bash) ব্যবহার করে এক্সিকিউট করা উচিত।
  5. নিচের মত স্ক্রিপ্ট এক্সিকিউট করুন। শেল স্ক্রিপ্ট এক্সিকিউশনে কোনো সমস্যা হলে, শেল স্ক্রিপ্ট এক্সিকিউশন টিউটোরিয়াল দেখুন
  6. $ bash helloworld.sh Hello World
  7. যখন আপনি "bash helloworld.sh" কমান্ডটি এক্সিকিউট করেন, এটি একটি নন-ইন্টারেক্টিভ শেল স্টার্ট করে এবং ফাইলনেমকে আর্গুমেন্ট হিসেবে পাস করে।
  8. প্রথম লাইনটি অপারেটিং সিস্টেমকে বলে কোন শেল স্পায়ন করবে স্ক্রিপ্ট এক্সিকিউট করার জন্য।
  9. উপরের উদাহরণে, ব্যাশ ইন্টারপ্রেটার স্ক্রিপ্টটি ইন্টারপ্রেট করে এবং কমান্ডগুলো এক এক করে উপর থেকে নিচে এক্সিকিউট করে।
  10. আপনি "bash" লিডিং ছাড়া স্ক্রিপ্ট এক্সিকিউট করতে পারেন:
    • স্ক্রিপ্টের পারমিশন পরিবর্তন করুন যাতে আপনি (ইউজার) এক্সিকিউট করতে পারেন, কমান্ড "chmod u+x helloworld.sh" ব্যবহার করে।
    • স্ক্রিপ্ট ধারণকারী ডিরেক্টরি PATH এনভায়রনমেন্ট ভেরিয়েবলে থাকতে হবে। যদি না থাকে, আপনি স্ক্রিপ্টের অ্যাবসোলিউট পাথ নির্দিষ্ট করে এক্সিকিউট করতে পারেন।
  11. echo হলো একটি কমান্ড যা সিম্পলি আমরা যা আর্গুমেন্ট দিয়ে তা আউটপুট করে। এটি ভেরিয়েবলের মান প্রিন্ট করতে ও ব্যবহৃত হয়।

ব্যাশ-স্টার্ট-আপ ফাইল

আমরা পূর্বে .bash_profile এবং সম্পর্কিত ফাইলগুলির এক্সিকিউশন সিকোয়েন্সে আলোচনা করেছিলাম, যখন ব্যাশ ইন্টারেক্টিভ শেল হিসেবে আহ্বান করা হয়, এটি প্রথমে /etc/profile থেকে কমান্ড পড়ে এবং এক্সিকিউট করে। যদি /etc/profile না থাকে, তবে এটি ~/.bash_profile, ~/.bash_login এবং ~/.profile থেকে দিয়ে কমান্ড পড়ে এবং এক্সিকিউট করে দিয়ে ক্রমে। –noprofile অপশনটি শেল স্টার্ট হওয়ার সময় এই আচরণ বাধা देने ব্যবহার করা যেতে পারে।

সাধারণত আপনার bash_profile ~/.bashrc এক্সিকিউট করে। আপনি চাইলে একটি স্বাগত মেসেজ দেখাতে পারেন। এটি শুধু তখনই রান হয় যখন আপনি প্রথম লগইন করেন। আপনি যেসব ভেরিয়েবল চান এক্সপোর্ট করতে পারেন, এবং যেসব অ্যালিয়াস চান সেট করতে পারেন যা শেল খোলার পর রান হবে এবং উপলব্ধ থাকবে। যখন একটি লগইন শেল এক্সিট করে, ব্যাশ ~/.bash_logout ফাইল থেকে কমান্ড পড়ে এবং এক্সিকিউট করে।

উদাহরণ ২. লগইন করার সময় স্বাগত মেসেজ প্রিন্ট

নিচের কন্টেন্ট আপনার bash_profile ফাইলে টাইপ করুন। যদি ফাইলটি না থাকে, নিচের কন্টেন্টসহ একটি ফাইল তৈরি করুন।

$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."

যখন আপনি একটি ইন্টারেক্টিভ শেলে লগইন করবেন, তখন নিচের মত স্বাগত মেসেজ দেখবেন।

login as: root root@dev-db's password: Welcome on dev-db

উদাহরণ ৩. সিস্টেম সম্পর্কিত ইনফরমেশন প্রিন্ট

যখন আপনি একটি ইন্টারেক্টিভ শেলে লগইন করেন, তখন সার্ভারে ইনস্টল করা কার্নেলের নাম, ব্যাশ ভার্সন, আপটাইম এবং সার্ভারের টাইম দেখাতে পারেন।

$cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname." echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; date

যখন আপনি একটি ইন্টারেক্টিভ শেল লঞ্চ করবেন, নিচের মত মেসেজ প্রিন্ট হবে।

login as: root root@dev-db's password: Welcome on dev-db Kernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010

উদাহরণ ৪. লাস্ট লগইন ডিটেইলস প্রিন্ট

যদি একাধিক ইউজার একই মেশিনে একই লগইন ব্যবহার করে, তবে মেশিন जिससे লাস্ট লগইন হয়েছিল, এবং সে সময়ে লগইন করেছিল, সেসব ডিটেইল সবচেয়ে উপযোগী হয়। এই উদাহরণটি ইন্টারেক্টিভ শেলের শুরুতে লাস্ট লগইন ডিটেইলস প্রিন্ট করে।

$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname." 
echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; date

lastlog | grep "root" | awk {'print "Last login from : "$3

print "Last Login Date & Time: ",$4,$5,$6,$7,$8,$9;}'
স্টার্ট-আপে, নিচের মত মেসেজ পাবেন।

login as: root root@dev-db's password: Welcome on dev-db 
Kernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010

Last login from : sasikala-laptop

Last Login Date & Time: Tue Feb 22 11:24:01 +0100 2010

উদাহরণ ৫. স্টার্ট-আপের সময় ভেরিয়েবল এক্সপোর্ট এবং অ্যালিয়াস সেট

.bashrc এবং .bash_profile ফাইলগুলিতে আপনি সবচেয়ে कॉमन কমান্ডগুলো হলো export এবং alias কমান্ড।

একটি অ্যালিয়াস সিম্পলি একটি টেক্সটকে অন্য টেক্সট দিয়ে সাবস্টিটিউট করে। আপনি যখন একটি অ্যালিয়াস রান করেন, এটি সিম্পলি আপনি যা টাইপ করেছেন সেটিকে অ্যালিয়াস যা ইকুয়াল তো সেটি দিয়ে রিপ্লেস করে। উদাহরণস্বরূপ, আপনি যদি ls কমান্ডের জন্য একটি অ্যালিয়াস সেট করতে চান যাতে ফাইল/ফোল্ডার কালারের সাথে লিস্ট হয়, তবে নিচের মত করুন:

alias ls 'ls --color=tty'

আপনি যদি এই কমান্ডটি স্টার্ট-আপ ফাইলগুলোর যেকোনো একটিতে যোগ করেন, তবে আপনি ls কমান্ড এক্সিকিউট করতে পারেন, যেখানে এটি অটোম্যাটিক্যালি ls –color=tty কমান্ড দিয়ে রিপ্লেস হবে।

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

নিচের উদাহরণে, এটি HISTSIZE এনভায়রনমেন্ট ভেরিয়েবল এক্সপোর্ট করছে। # দিয়ে শুরু হওয়া লাইনটি একটি কমেন্ট লাইন।

$ cat /etc/profile alias ls 'ls --color=tty' # Setup some environment variables. export HISTSIZE=1000 PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc export PATH export SVN_SH=${SVN_RSH-ssh}

  1. rbash: রেস্ট্রিক্টেড Bash শেল মাস্টার করুন – কনসেপ্ট, ব্যবহার, এবং প্র্যাক্টিক্যাল উদাহরণ

  2. Bash অটোমেশন স্ক্রিপ্ট দিয়ে ইমেজ অপ্টিমাইজেশন স্ট্রিমলাইন করুন

  3. ব্যাশ ভেরিয়েবল মাস্টার করুন: গ্লোবাল ও লোকাল ব্যবহারের ৬টি প্র্যাক্টিক্যাল উদাহরণ

  4. ব্যাশ শেল ফাংশন মাস্টার করুন: ৬টি প্র্যাক্টিক্যাল উদাহরণ ও টিপস