Si të shkruani Bash WHILE-Loops

Komandat, Sintaksa dhe Shembuj

Ju mund të ekzekutoni një sekuencë komandash duke i shkruar ato në një skedar script dhe pastaj duke e drejtuar atë.

Një skedar skedari është thjesht një skedar teksti, zakonisht me ekstensionin e skedarit .SH, që përmban një sekuencë udhëzimesh që gjithashtu mund të ekzekutohet nga rreshti i komandës ( shell ).

Ndërsa Shembuj Loop

Më poshtë është një shembull i një loop kohë. Kur ekzekutohet, skedari i shkrimit do të shtypë numrat 1 deri në 9 në ekran. Ndërsa deklarata ju jep më shumë fleksibilitet për specifikimin e kushtit të përfundimit sesa për-loop .

#! / bin / bash count = 1 ndërsa [$ count -le 9] bën echo "$ count" sleep 1 ((count ++)) është bërë

Për shembull, ju mund të bëni skriptin e mëparshëm një lak i pafund duke mos përmendur deklaratën e rritjes "((count ++))":

#! / bin / bash count = 1 ndërsa [$ count -le 9] bën echo "$ count" gjumi 1 bërë

Deklarata "gjumi 1" ndalon ekzekutimin për 1 sekondë në çdo përsëritje. Përdorni shkurtore të tastierës Ctrl + C për të përfunduar procesin.

Ju gjithashtu mund të krijoni një lak i pafund duke vënë një zorrës së trashë si kusht:

#! / bin / bash count = 1 ndërsa: echo "$ count" fle 1 ((count ++)) është bërë

Në mënyrë që të përdorni kushte të shumëfishta gjatë ciklit të kohës, duhet të përdorni simbolin e dyfishtë të katërkëndit:

count = 1 done = 0 ndërsa [[$ count -le 9] && [$ done == 0]] echo "$ count" sleep 1 ((count ++)) nëse [$ count == 5]; atëherë $ done = 1 fi done

Në këtë skenar, ndryshuesi "done" fillohet në 0 dhe pastaj vendoset në 1 kur numërimi arrin 5. Kushti loop pohon se loop kohë do të vazhdojë për aq kohë sa "count" është më pak se nëntë dhe "done" është e barabartë në zero. Prandaj dalja dalja kur numërimi është i barabartë me 5.

"&&" do të thotë logjike "dhe" dhe "||" do të thotë logjike "ose".

Një simbol alternativ për lidhjet "dhe" dhe "ose" në kushte është "-a" dhe "-o" me kllapa të vetme katrorë. Gjendja e mësipërme:

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

... mund të rishkruhet si:

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

Leximi i një skedari teksti zakonisht bëhet me një kohë loop. Në shembullin e mëposhtëm, skeda bash lexon vijën e përmbajtjes sipas rreshtit të një skedari të quajtur "inventory.txt:"

FILE = inventory.txt exec 6

Linja e parë cakton emrin e skedarit të hyrjes në variablën "FILE". Rreshti i dytë kursen "hyrjen standarde" në përshkruesin e skedarit "6" (mund të jetë çdo vlerë ndërmjet 3 dhe 9). Kjo është bërë në mënyrë që "hyrja standarde" të mund të rikthehet në skedarin e skedarit "0" në fund të skriptit (shih deklaratën "exec 0 Në rreshtin e tretë skedari i hyrjes i është caktuar skedarit" 0 "që përdoret për hyrjen standarde. Deklarata "lexo" pastaj lexon një vijë nga skedari në çdo përsëritje dhe e cakton atë në variablën "line1".

Në mënyrë që të dalësh para kohe në një kohë loop, ju mund të përdorni deklaratën break si kjo:

count = 1 done = 0 ndërsa [$ count -le 9] nuk echo "$ count" sleep 1 ((count ++)) nëse [$ count == 5]

Deklarata e thyer kalon ekzekutimin e programit deri në fund, ndërsa mbyll dhe zbaton ndonjë deklaratë që ndjek atë. Në këtë rast, deklarata "echo përfunduar".

Deklarata e vazhduar, në anën tjetër, kalon vetëm pjesën tjetër të deklaratës së ciklit të tanishëm të përsëritjes aktuale dhe hedhje drejtpërdrejt në iteracion tjetër:

count = 1 bërë = 0 ndërsa [$ count -le 9] nuk fle 1 ((count ++)) nëse [$ count == 5] pastaj vazhdo fi echo "$ count" done echo Finished

Në këtë rast, deklarata "vazhdo" ekzekutohet kur ndryshueshmëria "numërim" arrin 5. Kjo do të thotë që deklarata e mëvonshme (echo "$ count") nuk ekzekutohet në këtë përsëritje (kur vlera e "numërimit" është 5).