Skilningur og ritunaraðgerðir í Shell Scripts - Hluti VI
Aðgerðir gegna mikilvægu hlutverki í hvaða forritunarmáli sem er. Eins og mörg raunveruleg forritunarmál, hefur bash aðgerðir sem eru notaðar með takmarkaðri útfærslu.
Hvað eru aðgerðir?
Í forritun eru aðgerðir nefndir hlutar forrits sem framkvæmir ákveðið verkefni. Í þessum skilningi er aðgerð eins konar aðferð eða venja. Þegar fall er kallað yfirgefur forritið núverandi hluta kóðans og byrjar að framkvæma fyrstu línuna í fallinu. Alltaf þegar það er endurtekinn kóða eða þegar verkefni er endurtekið skaltu íhuga að nota aðgerð í staðinn.
Skoðaðu til dæmis tilvikið þar sem við þurfum að finna þáttatölu á nokkrum stigum tiltekins forrits. Í stað þess að skrifa allan kóðann (til að reikna út þáttagildið) í hvert skipti, getum við skrifað þann hluta kóðans sem reiknar þáttinn einu sinni inni í blokk og endurnýtt það sama við mörg tækifæri.
- Það hjálpar okkur að endurnýta kóðann.
- Bættu læsileika forritsins.
- Skilvirk notkun á breytum innan forritsins.
- Leyfir okkur að prófa forritið hluta fyrir hluta.
- Sýnir forrit sem fullt af undirskrefum.
Almenn setningafræði til að skrifa aðgerðir í skeljaskriftu inniheldur eftirfarandi leiðir.
function func_name { . . . commands . . . } or func_name ( ) { . . . commands . . . } Opening curly braces can also be used in the second line as well. func_name ( ) { . . . commands . . . }
Þér er alltaf frjálst að skrifa gildar skipanir inni í þessum aðgerðarblokkum eins og við gerum venjulega í skeljaforskriftum. Nú skulum við reyna að skrifa eitt einfalt handrit með lítilli aðgerð inni í því.
#!/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
Fallskilgreiningin verður að vera á undan fyrsta kalli til hennar. Það er ekkert eins og að „lýsa yfir aðgerðinni“ áður en þú hringir í hana. Og við getum alltaf hreiðrað aðgerðir inni í aðgerðum.
Athugið: - Að skrifa tómar aðgerðir leiðir alltaf til setningafræðivillna.
Þegar sama aðgerðin er skilgreind mörgum sinnum er lokaútgáfan það sem er kallað fram. Tökum dæmi.
#!/bin/bash func_same ( ) { echo ‘First definition’ } func_same ( ) { echo ‘Second definition’ } func_same exit 0
Við skulum komast dýpra með því að íhuga aðgerðir sem taka færibreytur og skila gildum. Til að skila gildi úr falli notum við innbyggða ‘aftur’ skelina. Setningafræði er sem hér segir.
func_name ( ) { . . . commands . . . return $ret_val }
Á sama hátt getum við sent rök til aðgerðanna sem eru aðskilin með bilum eins og gefið er upp hér að neðan.
func_name $arg_1 $arg_2 $arg_3
Inni í fallinu getum við nálgast rökin í röð sem $1, $2, $3 og svo framvegis. Horfðu á eftirfarandi dæmi skriftu til að finna hámarkið af tveimur heiltölum með því að nota fall til að auka skýrleika.
#!/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
Ofangreint lítur út fyrir að vera svolítið flókið, en það er einfalt ef við lesum í gegnum línurnar. Fyrst hreiður if-else if línur til að sannprófa, þ.e.a.s. til að athuga fjölda og tegund röka með hjálp reglulegra segða. Eftir það köllum við fallið með tveimur skipanalínurökum og birtum niðurstöðuna þar sjálfa. Þetta er vegna þess að við getum ekki skilað stórum heiltölum frá falli. Önnur leið til að vinna í kringum þetta vandamál er að nota alþjóðlegar breytur til að geyma niðurstöðuna inni í fallinu. Handritið hér að neðan útskýrir þessa aðferð.
#!/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
Prófaðu nú nokkur spennandi vandamál sem voru útskýrð í fyrri skeljaforskriftarröðinni með því að nota eftirfarandi aðgerðir.
- Skiljið undirstöðuráðleggingar um Linux Shell forskriftarmál – I. hluti
- 5 Shell forskriftir fyrir Linux nýliða til að læra Shell forritun – Part II
- Sigling í gegnum heim Linux BASH skrifta – hluti III
- Stærðfræðilegur þáttur Linux Shell-forritunar – Hluti IV
- Útreikningur á stærðfræðilegum tjáningum á skeljaforskriftarmáli – V. hluti
Ég mun koma aftur með meiri innsýn í hagnýta eiginleika eins og að nota staðbundnar breytur, endurkomu osfrv í næsta hluta. Vertu uppfærður með athugasemdum.