এই আর্টিকেলে ব্যাখ্যা করা হয়েছে ব্যাশ স্ক্রিপ্টে functions কিভাবে ব্যবহার করবেন - আপনার কোড রিয়ুজ করতে এবং স্ক্রিপ্ট সিম্পলিফাই করতে হেল্প করে।
কেন একই কোড বারবার লিখবেন যখন একবার লিখে রি-ইউজ করতে পারেন?
এটাই functions আপনাকে করতে দেয়।
এই আর্টিকেলে Bash/Shell স্ক্রিপ্টে ফাংশন ব্যবহারের আউটলাইন দেওয়া আছে।
ফাংশন কী?
একটি ফাংশন হলো রি-ইউজেবল কোডের টুকরো। ফাংশন প্যারামিটার অ্যাকসেপ্ট করতে পারে, যা সেটাকে একই রিপিটেবল অ্যাকশন বিভিন্ন ইনপুটের ওপর পারফর্ম করতে দেয়।
ফাংশন সাধারণত যেকোনো অ্যাকশন পারফর্ম করে, আউটপুট বা প্রিন্ট রেজাল্ট, বা ভবিষ্যতের ব্যবহারের জন্য একটি ভ্যালু রিটার্ন করে।
কেন ফাংশন ব্যবহার করব?
উদাহরণস্বরূপ, আপনার একটি স্ক্রিপ্ট আছে যা ইমেল নোটিফিকেশন পাঠায় কিছু ঘটলে। আপনি যদি একাধিক različন ইমেল একাধিক রেসিপিয়েন্টে পাঠাতে চান, আপনি একই ইমেল-সেন্ডিং কোড স্ক্রিপ্টে কয়েকবার লিখতে পারেন মেসেজ পাঠাতে।
ফাংশন ব্যবহার করলে, আপনি এই কোড একবার লিখবেন, তারপর আলাদা রেসিপিয়েন্ট, সাবজেক্ট, এবং মেসেজ দিয়ে কল করবেন, এক লাইন ফাংশন কল দিয়ে ডুপ্লিকেট কোডের বদলে।
ব্যাশ ফাংশন সিনট্যাক্স
Bash/Shell স্ক্রিপ্টে ফাংশন লেখার সিনট্যাক্স:
name_of_function () { # COMMANDS # Optional return value } নোট করুন:
- name_of_function হলো আপনি যে নাম দিয়ে ফাংশন কল করতে চান
- অ্যালফানিউমেরিক ক্যারেক্টার এবং আন্ডারস্কোর ওনলি!
- ফাংশন নাম অবশ্যই () (স্ট্যান্ডার্ড ব্র্যাকেট) দিয়ে ফলো করতে হবে
- ব্র্যাকেটের চারপাশে স্পেস থাকতে হবে! এগুলো রিকোয়ার্ড!
- আপনি যে কোড ফাংশন এক্সিকিউট করতে চান সেটা {} (কার্লি ব্র্যাকেট) দিয়ে র্যাপ করতে হবে
- কার্লি ব্র্যাকেটের বাইরের যেকোনো কোড ফাংশনের অংশ নয় এবং এক্সিকিউট হবেনা।
- COMMANDS হতে পারে আপনার লিনাক্স সিস্টeme সাধারণত উপলব্ধ যেকোনো কমান্ড
- আপনি অপশনালি return করতে পারেন একটি ভ্যালু - নিচের উদাহরণে ইউজেজ দেখুন
- ফাংশন যেন এরলি টার্মিনেট করুন, আপনি return ভ্যালু ছাড়া কল করতে পারেন ফাংশন থেকে এক্সিট করতে
- স্পেশাল $? ভেরিয়েবল লাস্ট এক্সিকিউটেড কমান্ডের রিটার্নড ভ্যালু ধরে রাখে, তাই ফাংশন রান হওয়ার পর স্ক্রিপ্টে অন্য জায়গায় অ্যাকসেসিবল থাকে
উদাহরণ ও ব্যাখ্যা
এখানে একটি উদাহরণ যা সব ভিন্ন ব্যাশ ফাংশন এলিমেন্ট ইলাস্ট্রেট করে - কমেন্টসহ যা ব্যাখ্যা করে সব কিছু কী করছে।
#!/bin/bash # একটি গ্লোবাল ভেরিয়েবল ডিফাইন - স্ক্রিপ্টে যেকোনো জায়গা থেকে অ্যাকসেসিবল কারণ এটি ফাংশন বা লুপের ভিতরে ডিফাইন করা নয় initial_value=3 # একটি ফাংশন ডিফাইন যা কিছু ম্যাথেমেটিক্স করে my_math_function () { # ফাংশনে পাস করা প্যারামিটার পান # প্যারামিটার ফাংশন নামের পরে কল করার সময় পাস করা হয়, এবং আপিরেন্স অর্ডারে নামকরণ হয়, $1 থেকে শুরু করে, তারপর $2, ইত্যাদি # নিচে, এই প্যারামিটার ভ্যালুগুলো লোকাল ভেরিয়েবলে অ্যাসাইন করা হয়েছে - শুধু ফাংশনের ভিতরে উপলব্ধ - যাতে বুঝতে সহজ হয় সেগুলো কী local multiplier_value=$1 local addition_value=$2 # রেজাল্ট ক্যালকুলেট করুন এবং লোকাল ভেরিয়েবলে অ্যাসাইন করুন # ক্যালকুলেশনগুলো $(( )) দিয়ে র্যাপ করা লক্ষ্য করুন - এটি স্ক্রিপ্টকে বলে এই ক্যালকুলেশনগুলোর রেজাল্ট results ভেরিয়েবলে অ্যাসাইন করুন, বরং ক্যালকুলেশনটিকে টেক্সট ভ্যালু হিসেবে অ্যাসাইন করুন local result=$(( $initial_value * $multiplier_value + $addition_value )) # কনসোলে রেজাল্ট প্রিন্ট করুন # ফাংশন কীভাবে ব্যবহার হচ্ছে সেটা ডিপেন্ড করে, ফাংশন থেকে টেক্সট আউটপুট ব্যবহার করা যায় রেজাল্ট পড়তে echo $result # ফাংশন থেকে আউটপুট পাওয়ার অন্য একটি উপায় হলো রিটার্ন ভ্যালু return $result } # ফাংশন কল করুন ভিন্ন ইনপুট প্যারামিটারসহ # প্যারামিটার ফাংশনকে পাস করা হয় ফাংশন নামের পরে স্পেস দিয়ে টাইপ করে # উপরের ফাংশন দুটি প্যারামিটার এক্সপেক্ট করে - একটি multiplier_value এবং addition_value my_math_function 2 4 # আউটপুট ১০ (2 * 3 + 4) my_math_function 3 5 # আউটপুট ১৪ (3 * 3 + 5) # $? হলো ব্যাশ স্ক্রিপ্টে একটি স্পেশাল ভেরিয়েবল যা লাস্ট এক্সিকিউটেড কমান্ডের রিটার্ন ভ্যালু সবসময় ধরে রাখে # এটি ফাংশন থেকে স্পেসিফাইড রিটার্ন ভ্যালু পেতে ব্যবহার করা যায়। echo $? # আউটপুট ১৪ # ফাংশনের রেজাল্ট একটি ভেরিয়েবলে অ্যাসাইন করুন # এটি ফাংশন দ্বারা আউটপুট করা যেকোনো টেক্সট (উদাহরণস্বরূপ echo কমান্ড ব্যবহার করে) একটি ভেরিয়েবলে অ্যাসাইন করবে my_result=$(my_math_function 6 7) echo $my_result # আউটপুট ২৫ (6 * 3 + 7) লিনাক্স শেল স্ক্রিপ্টে '#!' কী?
আপনার শেল স্ক্রিপ্টে ভ্যালু পাস করতে চান (যাতে সেগুলো ফাংশনগুলোর পাস করতে পারেন)? এই আর্টিকেল চেক করুন।