Ungabhala njani iBash WHILE-Loops

Imiyalelo, i-Syntax, kunye nemizekelo

Unokwenza ulandelelwano lwemiyalelo ngokubhala kwifayile yeskripthi uze uyisebenzise.

Ifayile yeskripthi yile fayili yombhalo, ngokuqhelekileyo kunye nokwandiswa kwefayile ye-.SH, equlethe ulandelelwano lwemiyalelo enokuphinda iqhutywe kumgca womyalelo ( igobolondo ).

Ngexesha lo mzekelo

Ngezantsi umzekelo wesikhewu esithile. Xa senziwa, le fayili yeskripthi iya kuprinta amanani 1 ukuya ku-9 kwisikrini. Ixesha elifutshane-ingxelo linikeza ubuninzi bokuguquguquka kokucacisa imeko yokuphelisa ngaphandle kwe -loop-loop .

#! / bin / bash count = 1 ngelixa i-$ count -le 9] yenza i-"count count" ((count +++) yenzeke

Ngokomzekelo, unokwenza i-script yangaphambili ibe ngumtya ongapheliyo ngokushiya isitatimende sokwandisa "((count +++)):

#! / bin / bash count = 1 ngelixa i-$ count-9] yenza u-"$ count" yokulala 1 eyenziwe

Isitethi "sokulala 1" simisa ukuqhutyelwa kwekota yesibini kwi-iteration nganye. Sebenzisa i-Ctrl + C ikhibhodi yokuncinci yokuphelisa inkqubo.

Unokudala i-loop engapheli ngokubeka ikholoni njengemeko:

#! / bin / bash count = 1 ngelixa: yenza u-"count count" ((count +++))

Ukuze usebenzise iimeko ezininzi kwixesha elidlulileyo, kufuneka usebenzise i-bracket square bracket:

count = 1 kwenziwe = 0 ngelixa [[$ count -le 9] && [$ eyenziwe == 0]] yenza u-"count count" ((count ++)) ukuba [i-count count == 5]; kwenzelwa i $ = 1

Kule script, uguquko "owenziweyo" luqaliswa kwi-0 kwaye lubekwe kwi-1 xa inani lifikelela ku-5. Isimo sokusila sichaza ukuba loop ixesha liya kuqhubeka njengoko "isibalo" singaphantsi kweesithoba kwaye "senziwe" silingana ukuya kutsho. Ngoko ke iziqwithi ziphuma xa inani lilingana no-5.

"&&" ithetha inengqiqo "kwaye" kwaye "||" kuthetha ukuqiqa "okanye".

Ukwahlula okunye kwezihlanganisi "kunye" kunye "okanye" kwiimeko "-a" kunye "-o" kunye neebhanki ezikwele. Umqathango olapha ngasentla:

[[$ count-9] && [$ done == 0]]

... iyakubhalwa kwakhona ngokuthi:

[$ count-9] -a [i $ eyenziwe == 0]

Ukufunda ifayile yesicatshulwa ngokuqhelekileyo iyenzeka ngexesha elithile. Kulo mzekelo olandelayo, iskripthi sebhashi sifunda umgca wokuqukethwe ngomgca wefayile ebizwa ngokuthi "i-inventory.txt:"

IFILE = ukulandelwa.txt exec 6

Umgca wokuqala unikezela igama lefayile yefayile kwi "FILE". Umgca wesibini ugcina "i-input standard" kwifayile yeenkcukacha "6" (ingaba nayiphina ixabiso phakathi kuka-3 no-9). Oku kwenziwa ukwenzela ukuba "i-input standard" ingabuyiselwa kwi-descriptor yefayile "0" ekupheleni kweskripthi (funda isitatimenti "senze 0 Ngomgca wesithathu ifayile yenkcazo inikezelwa kwifayile yeenkcukacha" 0, "esetyenziswa isingqinisiso esifanelekileyo. Isitatimende "sokufunda" sifunda umgca ukusuka kwifayili nganye kwi-iteration kwaye uyayinikezela kwi "variable1".

Ukuze uhambe ngokukhawuleza ukuphuma kwexesha elithile, ungasebenzisa isitatimende sokuphumula njengale:

inani = 1 eyenziwe = 0 ngelixa i-$ count-9] yenza i-"count count" ((count +++)) ukuba [i-count count == 5] idibanise i-echo efihliweyo.

Isitatimende sokuphuka siphumelela ukuphunyezwa kwenkqubo ekugqibeleni ngelixa lihamba kwaye liqhuba naziphi na izitatimende ezilandelayo. Kule meko, inqaku elithi "echo Finished."

Ukuqhubeka kwesitatimende, ngakwelinye icala, ludla kuphela ixesha elilodwa lexesha loop lokutshintshwa kwe-iteration kwaye liye ngqo kwi-iteration elandelayo:

inani = 1 kwenziwe = 0 ngelixa i-$ count-9] ilala 1 ((count +++)) ukuba [i-count count == 5] uqhubeke u-"$ count" echotshiwe ephelile

Kule meko, inqaku elithi "qhubela phambili" lwenziwa xa i-variable "count" ifinyelela 5. Oku kuthetha itekisi elandelayo (echo "$ count") ayenziwanga kule ntlawulo (xa inani "lokubala" li-5).