Kako napisati Bash WHILE-Loops

Ukazi, sintaksa in primeri

Izvedete lahko zaporedje ukazov tako, da jih napišete v skriptno datoteko in jo nato zaženete.

Skriptna datoteka je preprosta besedilna datoteka, običajno s pripono .SH, ki vsebuje zaporedje navodil, ki jih je mogoče izvesti tudi iz ukazne vrstice ( lupine ).

Medtem ko Loop Primeri

Spodaj je primer časa zanke. Ko se izvede, bo ta skriptna datoteka natisnila številke od 1 do 9 na zaslonu. Izjava o času, ki vam omogoča večjo fleksibilnost pri določanju končnega stanja, kot je za zanke .

#! / bin / bash count = 1, medtem ko [$ count -le 9] echo "$ count" sleep 1 ((count +))

Na primer, lahko prejšnji skript naredite neskončno zanko tako, da izpuščate stavek »((count ++))«:

#! / bin / bash count = 1, medtem ko [$ count -le 9] echo "count" "sleep 1"

Izjava »spanje 1« za vsako ponovitev ustavi izvajanje za 1 sekundo. Za prekinitev postopka uporabite bližnjico na tipkovnici Ctrl + C.

Prav tako lahko ustvarite neskončno zanko, tako da daste dvopičje kot pogoj:

#! / bin / bash count = 1 medtem ko: echo "$ count" sleep 1 ((count ++)) storjeno

Če želite uporabiti več pogojev v času zanke, morate uporabiti zapis dvakratnega kvadrata:

count = 1 done = 0, medtem ko [[$ count -le 9] && [$ done == 0]] echo "$ count" sleep 1 ((count ++)), če [$ count == 5]; potem je $ done = 1 fi storjeno

V tem skriptu se spremenljivka "done" inicializira na 0 in nato nastavi na 1, ko število doseže 5. Stanje zanka določa, da se bo zanka medtem nadaljevala, dokler je "štetje" manj kot devet in "opravljeno" je enako na nič. Zato zanke izstopajo, ko je štetje enako 5.

"&&" pomeni logično "in" in "||" pomeni logično "ali".

Alternativna oznaka za konjunkcije "in" in "ali" v pogojih je "-a" in "-o" z enojnimi oglati oklepaji. Zgoraj navedeni pogoj:

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

... bi bilo mogoče ponovno napisati kot:

[$ count -le 9] -a [$ končano == 0]

Branje besedilne datoteke se ponavadi opravi z zanko v času. V naslednjem primeru bash skript prebere vsebinsko vrstico po vrstici datoteke, imenovano "inventory.txt:"

FILE = inventory.txt exec 6

Prva vrstica dodeljuje ime vhodne datoteke spremenljivki »FILE«. Druga vrstica shrani "standardni vhod" v deskriptorju datoteke "6" (lahko je katera koli vrednost med 3 in 9). To naredite tako, da se na koncu skripta "standardni vnos" lahko obnovi v deskriptorje datoteke "0" (glejte izjavo "exec 0 V tretji vrstici je vhodna datoteka dodeljena deskriptorju datoteke" 0 ", ki se uporablja Za standardni vnos. Stavek "bere" nato bere črto iz datoteke na vsaki ponovitvi in ​​jo dodeli spremenljivki "line1".

Da bi predčasno zapustili časovno zanko, lahko uporabite ukaz za prekinitev, kot je ta:

count = 1 done = 0, medtem ko [$ count -le 9] echo "$ count" sleep 1 ((count ++)), če [$ count == 5]

Izjava o prekinitvi preskoči izvajanje programa do konca med zanko in izvrši vse izjave, ki sledijo temu. V tem primeru je izjava »echo Finished«.

Izjava o nadaljevanju po drugi strani preskoči le preostali del izjave zanke trenutne ponovitve in skokov neposredno na naslednjo ponovitev:

count = 1 done = 0, medtem ko [$ count -le 9] spi 1 ((count ++)), če [$ count == 5] nadaljujemo s finim izborom "$ count" done echo Finished

V tem primeru se stavek "nadaljuje" izvede, ko spremenljivka "count" doseže 5. To pomeni, da se naslednja izjava (echo "$ count") na tej ponovitvi ne izvede (ko je vrednost "count" 5).