Pagsabot ug Pagsulat mga gimbuhaton sa Shell Scripts - Bahin VI


Ang mga function adunay hinungdanon nga papel sa bisan unsang programming language. Sama sa daghang tinuud nga mga sinultian nga programming, ang bash adunay mga gimbuhaton nga gigamit nga adunay limitado nga pagpatuman.

Unsa ang mga gimbuhaton?

Sa programming, ang mga function ginganlan og mga seksyon sa usa ka programa nga naghimo sa usa ka piho nga buluhaton. Niini nga pagsabut, ang usa ka function usa ka matang sa pamaagi o rutina. Kung ang usa ka function gitawag ang programa mobiya sa kasamtangan nga seksyon sa code ug magsugod sa pagpatuman sa unang linya sa sulod sa function. Sa matag higayon nga adunay nagbalikbalik nga code o kung ang usa ka buluhaton gisubli, hunahunaa ang paggamit sa usa ka function.

Pananglitan, tagda ang kaso diin kinahanglan natong pangitaon ang factorial sa usa ka numero sa pipila ka yugto sa usa ka partikular nga programa. Imbis nga isulat ang tibuuk nga code (alang sa pagkalkula sa factorial) matag usa ug matag higayon, mahimo naton isulat ang bahin sa code nga nagkalkula sa factorial kausa sa sulod sa usa ka bloke ug magamit pag-usab ang parehas sa daghang mga okasyon.

  1. Kini makatabang kanamo sa paggamit pag-usab sa code.
  2. Pagpauswag sa pagkabasa sa programa.
  3. Episyente nga paggamit sa mga variable sulod sa programa.
  4. Nagtugot kanamo sa pagsulay sa programa bahin sa bahin.
  5. Nagpakita sa programa ingon usa ka hugpong sa mga sub-lakang.

Ang kinatibuk-ang syntax alang sa pagsulat function sa shell script naglakip sa mosunod nga mga paagi.

function func_name {
	. . .
	commands
	. . .
}

or

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

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

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

Kanunay ka nga gawasnon sa pagsulat ug balido nga mga sugo sa sulod niini nga mga bloke sa function sama sa naandan namong gibuhat sa mga script sa shell. Karon atong sulayan pagsulat ang usa ka yano nga script nga adunay gamay nga function sa sulod niini.

#!/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

Ang kahulugan sa function kinahanglan mag-una sa una nga tawag niini. Walay sama sa 'pagpahayag sa function' sa dili pa kini tawagan. Ug mahimo namon kanunay nga magsalag sa mga gimbuhaton sa sulod sa mga gimbuhaton.

Mubo nga sulat: - Ang pagsulat sa walay sulod nga mga gimbuhaton kanunay nga moresulta sa mga sayup sa syntax.

Kung ang parehas nga function gihubit sa daghang mga higayon, ang katapusan nga bersyon mao ang gihangyo. Atong kuhaon ang usa ka pananglitan.

#!/bin/bash

func_same ( ) {
	echo ‘First definition’
}

func_same ( ) {
	echo ‘Second definition’
}

func_same

exit 0

Magkalalom kita pinaagi sa pagkonsiderar sa mga gimbuhaton nga nagkuha mga parameter ug nagbalik nga mga kantidad. Aron ibalik ang usa ka kantidad gikan sa usa ka function gigamit namon ang built-in nga shell nga 'pagbalik'. Ang syntax mao ang mosunod.

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

Sa parehas nga paagi mahimo naton ipasa ang mga argumento sa mga gimbuhaton nga gibulag sa mga wanang sama sa gihatag sa ubos.

func_name $arg_1 $arg_2 $arg_3

Sa sulod sa function mahimo natong ma-access ang mga argumento sa han-ay nga $1, $2, $3 ug uban pa. Tan-awa ang mosunud nga pananglitan nga script aron makit-an ang labing kadaghan nga duha nga integer nga gigamit ang function aron madugangan ang katin-aw.

#!/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

Ang sa ibabaw morag medyo komplikado, apan kini yano kung atong basahon ang mga linya. Una nga nagsalag if-else kung mga linya alang sa mga katuyoan sa pag-validate i.e., aron masusi ang numero ug tipo sa mga argumento sa tabang sa mga regular nga ekspresyon. Human niana gitawag nato ang function nga adunay duha ka argumento sa command line ug gipakita ang resulta didto mismo. Kini tungod kay dili kita makabalik sa dagkong mga integer gikan sa usa ka function. Ang laing paagi sa pagsulbad niini nga problema mao ang paggamit sa global variables aron tipigan ang resulta sulod sa function. Ang script sa ubos nagpatin-aw niini nga pamaagi.

#!/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

Karon sulayi ang pipila ka kulbahinam nga mga problema nga gipatin-aw sa miaging serye sa shell scripting gamit ang mga function sama sa mosunod.

  1. Sabta ang Basic Linux Shell Scripting Language Tips – Part I
  2. 5 Shell Scripts para sa Linux Newbies nga Makakat-on sa Shell Programming – Part II
  3. Paglayag Sa Kalibutan sa Linux BASH Scripting – Bahin III
  4. Mathematical Aspeto sa Linux Shell Programming – Bahin IV
  5. Pagkuwenta sa Mathematical Expressions sa Shell Scripting Language – Bahin V

Mobalik ako nga adunay dugang nga panabut sa mga bahin nga magamit sama sa paggamit sa mga lokal nga variable, recursion etc sa sunod nga bahin. Magpabilin nga updated sa mga komento.