Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

शेल लिपियों में कार्यों को समझना और लिखना - भाग VI

किसी भी प्रोग्रामिंग भाषा में फंक्शन एक महत्वपूर्ण भूमिका निभाते हैं। कई वास्तविक प्रोग्रामिंग भाषाओं की तरह, बैश में ऐसे कार्य होते हैं जिनका उपयोग सीमित कार्यान्वयन के साथ किया जाता है।

शेल लिपियों में कार्यों को समझना और लिखना - भाग VI

फ़ंक्शन क्या हैं?

प्रोग्रामिंग में, फंक्शन्स को प्रोग्राम के उन वर्गों का नाम दिया जाता है जो एक विशिष्ट कार्य करते हैं। इस अर्थ में, फ़ंक्शन एक प्रकार की प्रक्रिया या दिनचर्या है। जब किसी फ़ंक्शन को कॉल किया जाता है तो प्रोग्राम कोड के वर्तमान भाग को छोड़ देता है और फ़ंक्शन के अंदर पहली पंक्ति को निष्पादित करना शुरू कर देता है। जब भी दोहराव वाला कोड हो या जब कोई कार्य दोहराया जाए, तो इसके बजाय किसी फ़ंक्शन का उपयोग करने पर विचार करें।

उदाहरण के लिए, उस मामले पर विचार करें जहां हमें किसी विशेष कार्यक्रम के कई चरणों में किसी संख्या का भाज्य ज्ञात करने की आवश्यकता होती है। हर बार पूरे कोड (फैक्टोरियल की गणना के लिए) लिखने के बजाय, हम कोड के उस हिस्से को लिख सकते हैं जो ब्लॉक के अंदर एक बार फैक्टोरियल की गणना करता है और कई मौकों पर उसका पुन:उपयोग करता है।

हम फंक्शन क्यों लिखते हैं?

  1. यह हमें कोड का पुन:उपयोग करने में मदद करता है।
  2. कार्यक्रम की पठनीयता में सुधार करें।
  3. कार्यक्रम के अंदर चरों का कुशल उपयोग।
  4. हमें कार्यक्रम का भाग-दर-भाग परीक्षण करने की अनुमति देता है।
  5. कार्यक्रम को उप-चरणों के समूह के रूप में प्रदर्शित करता है।
खोल स्क्रिप्ट में कार्य

शेल स्क्रिप्ट में फ़ंक्शन लिखने के लिए सामान्य सिंटैक्स में निम्नलिखित तरीके शामिल हैं।

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, $ 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

उपरोक्त थोड़ा जटिल लगता है, लेकिन अगर हम पंक्तियों के माध्यम से पढ़ते हैं तो यह आसान है। पहले नेस्टेड if-else if लाइन्स वेलिडेशन उद्देश्यों के लिए यानी रेगुलर एक्सप्रेशन की मदद से संख्या और तर्कों के प्रकार की जाँच करने के लिए। उसके बाद हम फ़ंक्शन को दो कमांड लाइन तर्कों के साथ कॉल करते हैं और वहां परिणाम प्रदर्शित करते हैं। ऐसा इसलिए है क्योंकि हम किसी फ़ंक्शन से बड़े पूर्णांक नहीं लौटा सकते। इस समस्या को हल करने का दूसरा तरीका परिणाम को फ़ंक्शन के अंदर संग्रहीत करने के लिए वैश्विक चर का उपयोग करना है। नीचे दी गई स्क्रिप्ट इस विधि की व्याख्या करती है।

#!/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. मूल Linux शेल स्क्रिप्टिंग भाषा युक्तियों को समझें - भाग I
  2. 5 शैल स्क्रिप्ट्स शेल प्रोग्रामिंग सीखने के लिए Linux के नए शौक़ीन लोगों के लिए - भाग II
  3. लिनक्स बैश स्क्रिप्टिंग की दुनिया के माध्यम से नौकायन - भाग III
  4. लिनक्स शेल प्रोग्रामिंग का गणितीय पहलू - भाग IV
  5. शैल स्क्रिप्टिंग भाषा में गणितीय अभिव्यक्तियों की गणना करना - भाग V

मैं अगले भाग में स्थानीय चर, रिकर्सन इत्यादि जैसे कार्यात्मक सुविधाओं के बारे में अधिक अंतर्दृष्टि के साथ वापस आऊंगा। टिप्पणियों से अपडेट रहें।


  1. शेलचेक - एक उपकरण जो शेल स्क्रिप्ट के लिए चेतावनियाँ और सुझाव दिखाता है

    शेलचेक एक स्थिर विश्लेषण उपकरण है जो बैश/श शैल स्क्रिप्ट में खराब कोड से संबंधित चेतावनियां और सुझाव दिखाता है। इसका उपयोग कई तरीकों से किया जा सकता है:वेब से अपनी शेल स्क्रिप्ट को एक ऑनलाइन संपादक (ऐस - जावास्क्रिप्ट में लिखा गया एक स्टैंडअलोन कोड संपादक) में https://www.shellcheck.net (यह हमेशा नव

  1. कस्टम शैल फ़ंक्शंस और पुस्तकालयों को कैसे लिखें और उपयोग करें

    Linux में, शेल स्क्रिप्ट कई अलग-अलग तरीकों से हमारी मदद करती हैं, जिसमें कुछ सिस्टम व्यवस्थापन कार्यों को निष्पादित करना या स्वचालित करना, सरल कमांड लाइन टूल बनाना और बहुत कुछ शामिल हैं। इस गाइड में, हम नए लिनक्स उपयोगकर्ताओं को दिखाएंगे कि कस्टम शेल स्क्रिप्ट को मज़बूती से कहाँ संग्रहीत किया जाए,

  1. बैश शैल फंक्शन ट्यूटोरियल 6 व्यावहारिक उदाहरणों के साथ

    बैश शेल फ़ंक्शन समूह के लिए एकल नाम का उपयोग करके बाद में निष्पादन के लिए कई UNIX / Linux कमांड को समूहबद्ध करने का एक तरीका है। . बैश शेल फ़ंक्शन को नियमित यूनिक्स कमांड की तरह ही निष्पादित किया जा सकता है। शेल फ़ंक्शंस को मौजूदा शेल संदर्भ में उनकी व्याख्या करने के लिए कोई नई प्रक्रिया बनाए बिना न