Kaip parašyti Bash WHILE-Loops

Komandos, sintaksė ir pavyzdžiai

Galite paleisti komandų seką, įrašydami juos į scenarijų failą ir paleidę jį.

Skripto failas yra tiesiog tekstinis failas, paprastai su .SH failo plėtiniu, kuriame yra instrukcijų seka, kuri taip pat gali būti vykdoma iš komandinės eilutės ( shell ).

Nors Loop pavyzdžiai

Žemiau pateikiamas kai kurios ciklo pavyzdys. Kai vykdomas, šis scenarijaus failas spausdins numerius nuo 1 iki 9 ekrane. Laiko ataskaita suteikia daugiau lankstumo nustatant nutraukimo būklę, palyginti su ciklu .

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

Pavyzdžiui, ankstesnį scenarijų galite padaryti begalinę kilpą, praleidžiant prieaugio pareiškimą "((count ++))":

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

"Miego 1" teiginys pristabdo vykdymą 1 sekundę kiekvienoje iteracijoje. Norėdami nutraukti procesą, naudokite sparčiuosius klavišus Ctrl + C.

Jūs taip pat galite sukurti begalinį kilpą, laikydami sąlygą dviem būdais:

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

Norint naudoti kelias sąlygas laikinojo ciklo metu, turite naudoti dvigubą kvadratinės kronšteino žymėjimą:

Count = 1 done = 0, kol [[$ count -le 9] && [$ done == 0]] echo "$ count" miego 1 ((count ++)) jei [$ count == 5]; tada $ done = 1 fi made

Šiame scenarijuje kintamasis "done" yra inicializuotas į 0 ir tada nustatomas į 1, kai skaičiavimas pasiekia 5. Apskritimo sąlyga nurodo, kad ciklo ciklas tęsis tol, kol "count" bus mažesnis nei devynis, o "done" lygus iki nulio. Todėl kilpos išeina, kai skaičius yra lygus 5.

"&&" reiškia loginį "ir" ir "||" reiškia loginį "arba".

Alternatyvi jungtys "ir" ir "arba" sąlygomis yra "-a" ir "-o" su vienos kvadratinės skliaustuose. Pirmiau nurodyta sąlyga:

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

... gali būti perrašytas kaip:

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

Teksto failo skaitymas paprastai atliekamas su ciklo metu. Kitame pavyzdyje bash scenarijus skaito turinio eilutę pagal failo pavadinimą "inventory.txt:"

FILE = inventory.txt exec 6

Pirmoji eilutė nurodo įvesties failo vardą į "FILE" kintamąjį. Antroji eilutė įrašo "standartinį įvestį" failo deskriptoriuje "6" (tai gali būti bet kokia vertė tarp 3 ir 9). Tai atliekama taip, kad scenarijaus pabaigoje būtų galima atkurti "standartinį įvestį", kad failo deskriptorius "0" (žr. Pareiškimą "exec 0" 3 eilutėje įvesties failas priskiriamas failo deskriptoriui "0", kuris naudojamas Standartinis įvestis. "Skaityti" teiginys tada skaito eilutę iš kiekvienos iteracijos failo ir priskiria jį "1 eilutė" kintamąjį.

Jei norite iš anksto išeiti iš laiko-ciklo, galite naudoti nutraukimo ataskaitą tokia:

Count = 1 done = 0, kol [$ count -le 9] echo "$ count" miego 1 ((count ++)), jei [$ count == 5], tada pertraukiame echo Finished

Pertraukos ataskaita praleidžia programos vykdymą iki ciklo pabaigos ir vykdo bet kokius jo požymius. Šiuo atveju teiginys "echo Finished".

Kita vertus, toliau pateiktas teiginys praleidžia tik likusį dabartinės iteracijos ciklo išvadą ir šokinėja tiesiai į kitą iteraciją:

Count = 1 done = 0, kol [$ count -le 9] miego 1 ((count ++)), jei [$ count == 5], tada tęskite "$ count" done echo Finished

Šiuo atveju teiginys "tęsti" vykdomas, kai kintamasis "count" pasiekia 5. Tai reiškia, kad vėlesnis teiginys (echo "$ count") nėra vykdomas šioje irterijoje (kai "count" reikšmė yra 5).