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

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

ব্যাশ শেল ফাংশন মাস্টার করুন: ৬টি প্র্যাক্টিক্যাল উদাহরণ ও টিপসব্যাশ শেল ফাংশন হলো যունিক্স/লিনাক্স কমান্ডের একটি গ্রুপকে একটি একক নামে গ্রুপ করার উপায়, যাতে পরবর্তীতে সেই নামে এক্সিকিউট করা যায়। ব্যাশ শেল ফাংশন একটি রেগুলার ইউনিক্স কমান্ডের মতো এক্সিকিউট করা যায়। শেল ফাংশনগুলো করেন্ট শেল কনটেক্সটে এক্সিকিউট হয়, নতুন কোনো প্রসেস তৈরি ছাড়া।

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

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

ব্যাশ ফাংশন তৈরি করার সিনট্যাক্স:

function functionname() { commands . . }
  • function হলো একটি কিওয়ার্ড যা অপশনাল।
  • functionname হলো ফাংশনের নাম
  • commands – ফাংশনে এক্সিকিউট होनेয় কমান্ডের তালিকা।

ফাংশন আর্গুমেন্ট গ্রহণ করে। এক্সিকিউশনের সময়, ফাংশনের আর্গুমেন্টগুলো পজিশনাল প্যারামিটার হয়ে যায়। পজিশনাল প্যারামিটার ০-তে স্ক্রিপ্টনেম থাকবে যা অপরিবর্তিত থাকে।

আপনি কমান্ড লাইন থেকে ব্যাশ ফাংশন কল করতে পারেন নিচের মত:

$ functionname arg1 arg2
  • শেল যখন একটি লিনাক্স কমান্ড ইন্টারপ্রেট করে, প্রথমে এটি স্পেশাল বিল্ট-ইন ফাংশনগুলোর মধ্যে খুঁজে বেড়ায় যেমন break, continue, eval, exec ইত্যাদি, তারপর শেল ফাংশনগুলো খুঁজে বেড়ায়।
  • ব্যাশ ফাংশনের এক্সিট স্ট্যাটাস হলো ফাংশন বডিতে শেষ এক্সিকিউট করা কমান্ডের এক্সিট স্ট্যাটাস।

নোট: শেল ফাংশন ডেফিনিশনগুলো একটি শেল স্টার্ট-আপ ফাইলে রাখুন (উদাহরণস্বরূপ, .bash_profile)। এইভাবে, শেল ফাংশনটি কমান্ড লাইন থেকে সর্বদা আপনার জন্য উপলব্ধ থাকবে। আমাদের পূর্বের ব্যাশ এক্সিকিউশন সিকোয়েন্স আর্টিকেলটি রেফার করুন যাতে বুঝতে পারেন .bash_profile কবে এক্সিকিউট হবে।

উদাহরণ ১: দिये गये এক্সটেনশনের সাথে ফাইলগুলোর লং লিস্ট দেখানোর ফাংশন

"lsext" ফাংশনটি করেন্ট ডিরেক্টরিতে দেওয়া এক্সটেনশনযুক্ত ফাইলগুলোর তালিকা খুঁজে বের করতে ব্যবহৃত হয় নিচের মত। এই ফাংশনটি find কমান্ড এবং ls কমান্ডের কম্বিনেশন ব্যবহার করে কাজটি করে।

$ function lsext() { find . -type f -iname '*.'${1}'' -exec ls -l {} \; ; } $ cd ~ $ lsext txt -rw-r--r-- 1 root root 24 Dec 15 14:00 InMorning.txt -rw-r--r-- 1 root root 184 Dec 16 11:45 Changes16.txt -rw-r--r-- 1 root root 458 Dec 18 11:04 Changes18.txt -rw-r--r-- 1 root root 1821 Feb 4 15:01 ChangesOfDB.txt

উদাহরণ ২. ফাইলের একটি গ্রুপে দেওয়া লিনাক্স কমান্ড এক্সিকিউট করার ব্যাশ ফাংশন

নিচের উদাহরণে, "batchexec" ফাংশনটি দেওয়া এক্সটেনশনযুক্ত ফাইলগুলো খুঁজে বের করে এবং সিলেক্ট করা ফাইলগুলোর ওপর দেওয়া কমান্ড এক্সিকিউট করে।

$ function batchexec() { find . -type f -iname '*.'${1}'' -exec ${@:2} {} \; ; } $ cd ~ $ batchexec sh ls $ batchexec sh chmod 755 $ ls -l *.sh -rwxr-xr-x 1 root root 144 Mar 9 14:39 debug.sh -rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh -rwxr-xr-x 1 root root 22 Mar 18 08:32 t.sh

উপরোক্ত উদাহরণে, এটি .sh এক্সটেনশনযুক্ত সকল শেল স্ক্রিপ্ট ফাইল খুঁজে বের করে এবং তাদের পারমিশন ৭৫৫-এ পরিবর্তন করে। (ইউজারের জন্য সব পারমিশন, গ্রুপ এবং অন্যদের জন্য রিড এবং এক্সিকিউট পারমিশন)। ফাংশন ডেফিনিশনে আপনি লক্ষ্য করবেন "${@:2}" যা দ্বিতীয় এবং পরবর্তী পজিশনাল প্যারামিটারগুলো দেয় (শেল এক্সপ্যানশন ফিচার)।

উদাহরণ ৩. র‍্যান্ডম পাসওয়ার্ড জেনারেট করার ব্যাশ ফাংশন

নিচের ফাংশনটি দেওয়া লেন্থের জন্য স্পেশাল ক্যারেক্টারসহ স্ট্রং র‍্যান্ডম পাসওয়ার্ড জেনারেট করতে ব্যবহৃত হয়। যদি লেন্থ দেওয়া না থাকে, ডিফল্টভাবে ১২ ক্যারেক্টার লেন্থের পাসওয়ার্ড জেনারেট করে।

$ function rpass() { cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12} } $ rpass 6 -Ju.T[[ $ rpass Gz1f!aKN^""k

উপরোক্ত উদাহরণে, rpass ৬ আর্গুমেন্ট দিয়ে এক্সিকিউট করলে ৬ ক্যারেক্টার লেন্থের র‍্যান্ডম পাসওয়ার্ড জেনারেট করে এবং আর্গুমেন্ট ছাড়া rpass ১২ ক্যারেক্টার লেন্থের পাসওয়ার্ড জেনারেট করে। ${1:-12} মানে যদি $1 আনসেট বা নাল হয়, তবে ১২ রিটার্ন করবে অন্যথায় $1-এর মান সাবস্টিটিউট হবে।

উদাহরণ ৪. দেওয়া ইন্টারফেসের IP অ্যাড্রেস পাওয়ার ব্যাশ ফাংশন

নিচের উদাহরণটি 'getip' নামে একটি ফাংশন ডিফাইন করে যা ইন্টারফেস নাম আর্গুমেন্ট হিসেবে নেয়, এবং মেশিনে দেওয়া ইন্টারফেসে অ্যাসাইন করা IP অ্যাড্রেস দেয়। (ডিফল্টভাবে eth0-এর IP অ্যাড্রেস রিটার্ন করে)। এটি ifconfig কমান্ড ব্যবহার করে IP অ্যাড্রেস পায়।

$ function getip() { /sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}'; } $ getip 15.110.106.86 $ getip eth0 15.110.106.86 $ getip lo 127.0.0.1

উদাহরণ ৫. মেশিনের ডিটেইলস প্রিন্ট করার ব্যাশ ফাংশন

এই উদাহরণটি একটি ফাংশন ডিফাইন করে যা মেশিন সম্পর্কে সকল প্রয়োজনীয় ইনফরমেশন দেয়। ইউজাররা এই ফাংশনকে স্টার্ট-আপ ফাইলে ডিফাইন এবং কল করতে পারেন, যাতে স্টার্টআপের সময় আপনি এই ইনফরমেশন পাবেন।

$ function mach() { echo -e "\nMachine information:" ; uname -a echo -e "\nUsers logged on:" ; w -h echo -e "\nCurrent date :" ; date echo -e "\nMachine status :" ; uptime echo -e "\nMemory status :" ; free echo -e "\nFilesystem status :"; df -h } $ mach Machine information: Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux Users logged on: root pts/2 ptal.mot Wed10 0.00s 1.35s 0.01s w -h Current date : Thu Mar 18 11:59:36 CET 2010 Machine status : 11:59:36 up 7 days, 3 min, 1 user, load average: 0.01, 0.15, 0.15 Memory status : total used free shared buffers cached Mem: 2059768 2033212 26556 0 81912 797560 -/+ buffers/cache: 1153740 906028 Swap: 4192956 48164 4144792 Filesystem status : Filesystem Size Used Avail Use% Mounted on /dev/sda1 12G 12G 0 100% / tmpfs 1006M 377M 629M 38% /dev/shm /dev/sdc5 9.9G 409M 9.0G 5% /mydisk

উদাহরণ ৬: ls আউটপুট ভালো ফরম্যাট করার ব্যাশ ফাংশন

নিচের ফাংশনটি স্ক্রিন ক্লিয়ার করবে, কার্সরকে স্ক্রিনের টপে রাখবে, ls এক্সিকিউট করবে, এবং তারপর কার্সরকে স্ক্রিনের এন্ডে রাখবে।

$ function ll () { clear; tput cup 0 0; ls --color=auto -F --color=always -lhFrt; tput cup 40 0; } $ ll

type কমান্ড ব্যবহার করে ফাংশন কোড দেখানো

type হলো একটি শেল বিল্ট-ইন যা ফাংশন কোড দেখাতে ব্যবহৃত হয়।

Syntax: type function-name
$ type ll ll is a function ll () { clear; tput cup 0 0; ls --color=auto -F --color=always -lhFrt; tput cup 40 0; alias ls="ls --color=auto -F" }

আপনার সুবিধার্থে, এই আর্টিকেলে উল্লেখিত সকল ৬টি ফাংশন এই স্যাম্পল .bash_profile ফাংশন ফাইল থেকে পান।

এই সব ফাংশন আপনার ~/.bash_profile ফাইলে যোগ করুন, যাতে আপনাকে এই ফাংশনগুলো সব সময় এক্সেস করতে 파র এবং বারবার তৈরি করতে না হয়।


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

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

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

  4. এক্সেল ডাটাবেস ফাংশনগুলোর মাস্টার গাইড: ব্যাবহারিক উদাহরণসহ ধাপে ধাপে নির্দেশনা