Hvernig á að skrifa Bash WHILE-Loops

Skipanir, setningafræði og dæmi

Þú getur framkvæmt röð skipana með því að skrifa þau í handritaskrá og þá keyra hana.

Handritaskrá er einfaldlega textaskrá, venjulega með .SH skráafnafninu, sem inniheldur röð leiðbeiningar sem gætu líka verið framkvæmdar úr skipanalínunni ( skel ).

Þó að slá dæmi

Hér að neðan er dæmi um tímalengingu. Þegar það er framkvæmt mun þessi handritaskrá prenta tölurnar 1 til 9 á skjánum. Á meðan yfirlýsingin gefur þér meiri sveigjanleika til að tilgreina uppsagnarskilyrði en for-loop .

#! / bin / bash count = 1 meðan [$ telja -le 9] gera echo "$ count" sleep 1 ((count ++)) gert

Til dæmis getur þú gert fyrri handritið óendanlega lykkju með því að sleppa hækkuninni "((telja + +))":

#! / bin / bash count = 1 meðan [$ count -le 9] gera echo "$ count" sofa 1 gert

Í "sleep 1" yfirlýsingunni er hlé á framkvæmdinni í 1 sekúndu við hverja endurtekningu. Notaðu Ctrl + C lyklaborðinu til að segja upp ferlinu.

Þú getur líka búið til óendanlega lykkju með því að setja ristill sem ástand:

#! / bin / bash count = 1 while: do echo "$ count" svefn 1 ((count ++)) gert

Til að nota margar aðstæður í meðan á lykkjunni stendur þarftu að nota tvöfalt fermingarmerkið:

telja = 1 gert = 0 meðan [[$ tölu -le 9] && [$ gert == 0]] gera echo "$ telja" svefn 1 ((telja ++)) ef [$ telja == 5]; þá $ gert = 1 fi gert

Í þessu handriti er breytu "gert" frumstilla á 0 og síðan stillt á 1 þegar fjöldinn nær 5. Lykkjuskilyrði segir að meðan lykkjan muni halda áfram svo lengi sem "telja" er minna en níu og "gert" er jafn til núlls. Þess vegna hætta lykkjur þegar fjöldinn er 5.

"&&" þýðir rökrétt "og" og "||" þýðir rökrétt "eða".

Annar merking fyrir táknin "og" og "eða" í skilyrðum er "-a" og "-o" með einum fermetra sviga. Ofangreind skilyrði:

[[$ tölu -le 9] && [$ done == 0]]

... gæti verið umritað sem:

[$ count -le 9] -a [$ done == 0]

Að lesa texta skrá er yfirleitt gert með meðan á lykkju stendur. Í eftirfarandi dæmi er bash handritið lesið innihaldslína eftir línu af skrá sem kallast "inventory.txt:"

FILE = inventory.txt exec 6

Fyrsti línan úthlutar innsláttarskránni til "FILE" breytu. Seinni línan vistar "staðalinntakið" í skráarlýsingu "6" (það gæti verið hvaða gildi sem er á milli 3 og 9). Þetta er gert þannig að hægt sé að endurheimta "staðalinntak" í skráarlýsingu "0" í lok handritsins (sjá yfirlýsingu "exec 0 Í 3. línu er innsláttarmyndin úthlutuð skráarlýsingu" 0 ", sem er notuð fyrir staðalinntak. "Lesa" yfirlýsingin lesi síðan línu úr skránni á hverri endurtekningu og gefur hana til "línu1" breytu.

Til þess að hætta tímabundið á tímabundið, geturðu notað svona yfirlýsingu:

telja = 1 gert = 0 á meðan [$ telja -la 9] gera echo "$ telja" sofa 1 ((telja + +)) ef [$ telja == 5] þá brjóta fi gert echo lokið

Slökunaryfirlitið sleppur áætluninni að lokinni meðan á lykkju stendur og keyrir einhverjar yfirlýsingar sem fylgja henni. Í þessu tilfelli er yfirlýsingin "echo Finished."

Áframhaldandi yfirlýsingin á hinn bóginn sleppur aðeins afganginum meðan á lykkjuyfirlýsingu núverandi endurtekningu stendur og stökk beint í næstu endurtekningu:

telja = 1 gert = 0 meðan [$ telja -la 9] gera svefn 1 ((telja + +)) ef [$ telja == 5] þá haltu áfram áframhaldandi echo "$ telja"

Í þessu tilfelli er "áfram" yfirlýsingin framkvæmd þegar breytu "telur" nær 5. Þetta þýðir að síðari yfirlýsingin (echo "$ count") er ekki framkvæmd á þessari endurtekningu (þegar gildi "telja" er 5).