শেল স্ক্রিপ্টগুলিতে ফাংশন বোঝা এবং লেখার - অংশ Part


যে কোনও প্রোগ্রামিং ভাষায় ফাংশনগুলি গুরুত্বপূর্ণ ভূমিকা পালন করে। অনেক বাস্তব প্রোগ্রামিং ভাষার মতো বাশেরও রয়েছে ফাংশন যা সীমিত প্রয়োগের সাথে ব্যবহৃত হয়।

ফাংশন কি?

প্রোগ্রামিংয়ে, ফাংশনগুলির একটি নির্দিষ্ট কার্য সম্পাদন করে এমন একটি প্রোগ্রামের বিভাগগুলির নাম দেওয়া হয়। এই অর্থে, একটি ফাংশন একধরণের পদ্ধতি বা রুটিন। যখন একটি ফাংশন বলা হয় প্রোগ্রাম কোডের বর্তমান বিভাগটি ছেড়ে দেয় এবং ফাংশনের ভিতরে প্রথম লাইনটি কার্যকর করতে শুরু করে। যখনই পুনরাবৃত্তি কোড থাকে বা যখন কোনও টাস্ক পুনরাবৃত্তি করে, তার পরিবর্তে কোনও ফাংশন ব্যবহার করে বিবেচনা করুন।

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

  1. এটি কোডটি পুনরায় ব্যবহার করতে আমাদের সহায়তা করে।
  2. প্রোগ্রামের পঠনযোগ্যতা উন্নত করুন
  3. প্রোগ্রামের ভিতরে ভেরিয়েবলের দক্ষ ব্যবহার
  4. আমাদের ভাগ করে অংশে প্রোগ্রামটি পরীক্ষা করার অনুমতি দেয়
  5. উপ-পদক্ষেপের গুচ্ছ হিসাবে প্রোগ্রামটি প্রদর্শন করে ys

শেল স্ক্রিপ্টে ফাংশন লেখার জন্য সাধারণ সিনট্যাক্সে নিম্নলিখিত উপায়গুলি অন্তর্ভুক্ত রয়েছে।

function func_name {
	. . .
	commands
	. . .
}

or

func_name ( ) {
	. . .
	commands
	. . .
}

Opening curly braces can also be used in the second line as well.

func_name ( )
{
	. . .
	commands
	. . .
}

আমরা শেল স্ক্রিপ্টগুলিতে সাধারণত যেমন করি তেমন এই ফাংশন ব্লকের ভিতরে বৈধ কমান্ড লিখতে আপনি সর্বদা নির্দ্বিধায়। এবার এর ভিতরে একটি ছোট ফাংশন সহ একটি সাধারণ স্ক্রিপ্ট লেখার চেষ্টা করা যাক।

#!/bin/bash

call_echo ( ) {
	echo ‘This is inside function’
}

op=$1

if [ $# -ne 1 ]; then
	echo "Usage: $0 <1/0>"
else
	if [ $1 = 0 ] ; then
		echo ‘This is outside function’
	elif [ $1 = 1 ] ; then
		call_echo
	else
		echo ‘Invalid argument’
	fi
fi

exit 0

ফাংশন সংজ্ঞা এটিতে প্রথম কলের পূর্বে অবশ্যই আবশ্যক। কল করার আগে ‘ফাংশন ঘোষণা করার’ মতো কিছুই নেই। এবং আমরা সবসময় ফাংশনের ভিতরে বাসা বাঁধতে পারি।

দ্রষ্টব্য: - খালি ফাংশন লেখার ফলে সর্বদা সিনট্যাক্স ত্রুটি হয়।

যখন একই ফাংশনটি একাধিকবার সংজ্ঞায়িত করা হয়, তখন চূড়ান্ত সংস্করণটি হ'ল। আসুন একটি উদাহরণ নেওয়া যাক।

#!/bin/bash

func_same ( ) {
	echo ‘First definition’
}

func_same ( ) {
	echo ‘Second definition’
}

func_same

exit 0

আসুন প্যারামিটারগুলি গ্রহণ করে এবং মানগুলি ফিরে আসার বিষয়ে বিবেচনা করে আরও গভীর হই। কোনও ফাংশন থেকে কোনও মান ফেরত দেওয়ার জন্য আমরা ‘রিটার্ন’ শেলটি অন্তর্নির্মিত ব্যবহার করি। সিনট্যাক্সটি নিম্নরূপ।

func_name ( ) {
	. . .
	commands
	. . .
	return $ret_val
}

একইভাবে আমরা ফাঁকা দিয়ে পৃথক ফাংশনগুলিতে আর্গুমেন্টগুলি নীচে দেওয়া যেতে পারি।

func_name $arg_1 $arg_2 $arg_3

ফাংশনের অভ্যন্তরে আমরা যুক্তিগুলি $1, $2, order 3 এবং আরও ক্রমানুসারে অ্যাক্সেস করতে পারি। আরও স্পষ্টতা যুক্ত করতে ফাংশন ব্যবহার করে সর্বোচ্চ দুটি পূর্ণসংখ্যার সন্ধান করতে নিম্নলিখিত উদাহরণ স্ক্রিপ্টটি দেখুন।

#!/bin/bash

USG_ERR=7

max_two ( ) {
	if [ "$1" -eq "$2" ] ; then
		echo 'Equal'
		exit 0
	elif [ "$1" -gt "$2" ] ; then
		echo $1
	else
		echo $2
	fi
}

err_str ( ) {
	echo "Usage: $0 <number1>  <number2>"
	exit $USG_ERR
}

NUM_1=$1
NUM_2=$2
x
if [ $# -ne 2 ] ; then
	err_str
elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then
	if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then  
		max_two $NUM_1 $NUM_2
	else
		err_str
	fi
else
	err_str
fi

exit 0

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

#!/bin/bash

USG_ERR=7
ret_val=

max_two ( ) {
	if [ "$1" -eq "$2" ] ; then
		echo 'Equal'
		exit 0
	elif [ "$1" -gt "$2" ] ; then
		ret_val=$1
	else
		ret_val=$2
	fi
}

err_str ( ) {
	echo "Usage: $0 <number1>  <number2>"
	exit $USG_ERR
}

NUM_1=$1
NUM_2=$2

if [ $# -ne 2 ] ; then
	err_str
elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then
	if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then  
		max_two $NUM_1 $NUM_2
		echo $ret_val
	else
		err_str
	fi
else
	err_str
fi

exit 0

নিম্নলিখিত কিছু ফাংশন ব্যবহার করে আগের শেল স্ক্রিপ্টিং সিরিজে ব্যাখ্যা করা হয়েছিল এমন কিছু উত্তেজনাপূর্ণ সমস্যাগুলি চেষ্টা করে দেখুন।

  1. বুনিয়াদি লিনাক্স শেল স্ক্রিপ্টিং ভাষার টিপসটি বুঝুন - প্রথম অংশ
  2. শেল প্রোগ্রামিং শিখতে লিনাক্স নিউবিয়সের জন্য 5 শেল স্ক্রিপ্ট - দ্বিতীয় খণ্ড
  3. লিনাক্স বিএএসএএসএইচ ওয়ার্ডের স্ক্রিপ্টিংয়ের মাধ্যমে বিক্রয় - অংশ তৃতীয়
  4. লিনাক্স শেল প্রোগ্রামিংয়ের গাণিতিক দিক - অংশ IV
  5. শেল স্ক্রিপ্টিং ভাষায় গাণিতিক এক্সপ্রেশন গণনা করা - অংশ পঞ্চম

পরের অংশে স্থানীয় ভেরিয়েবলগুলি ব্যবহার করা, পুনরাবৃত্তি ইত্যাদির মতো ক্রিয়ামূলক বৈশিষ্ট্যগুলিতে আরও অন্তর্দৃষ্টি দিয়ে ফিরে আসব। মন্তব্য সহ আপডেট থাকুন।