„Bash“ ciklas „While“: pamoka ir pavyzdžiai

„While“ ciklo naudojimas „Bash“ scenarijuose komandoms (-oms) kartoti.

Bash (Bourne Again Shell) yra apvalkalo komandų eilutė ir scenarijų kalba GNU/Linux operacinėse sistemose. Tai yra numatytasis daugelio Linux platinimų apvalkalas.

Kaip ir dauguma skriptų kalbų, „Bash“ pateikia ciklo sintakses, kad būtų galima pakartoti panašią užduotį kelis kartus. Šiame straipsnyje mes sužinosime, kaip naudoti kol kilpa Bash.

Įvadas

The kol kilpa Bash yra naudojama komandoms (vykdomoms komandoms) vykdyti kelis kartus, remiantis kitos komandos (-ų) išvestimi (sąlygų komandos). Vykdomos komandos bus vykdomos tol, kol sąlygos komanda bus sėkmingai paleista (t. y. grąžins 0 būseną. Bet kuri „Linux“ komanda grąžina 0, jei sėkminga, ir ne nulinį sveikąjį skaičių, jei nepavyko).

Jei yra kelios sąlygų komandos, sakinyje atsižvelgiama tik į paskutinės sąrašo komandos būseną, t. y. ciklas vykdomas tol, kol sėkmingai paleidžiama paskutinė sąrašo komanda.

Bendroji sintaksė

Bendroji sintaksė, skirta kol kilpa Bash yra:

o padaryti

Vykdymo komandų sąrašas bus vykdomas tol, kol paskutinė komanda sąlygų komandų sąraše bus sėkmingai paleista ir išeis su būsena 0. Iteracijos metu, kai paskutinė sąlygos komanda nepavyksta, ciklas išeina.

Vartotojas gali nurodyti bet kurį vykdomąjį failą komandų sąrašuose. Tai gali būti standartinės Linux programos arba tinkintos vartotojo programos ar scenarijai. Kiekviena komanda turi būti naujoje eilutėje arba atskirta kabliataškiu toje pačioje eilutėje.

Pažiūrėkime kelis pavyzdžius.

Ciklas tol, kol kintamasis turi tam tikrą reikšmę: Ši kilpa vykdoma iki kintamojo reikšmės x nėra lygus 10.

x=0, o [[ $x -ne 10 ]] atkartoja $x ((x++))

Kiekvienoje iteracijoje tikriname, ar x reikšmė yra 10. Vertė tikrinama naudojant bandymas komandą. [[ Išraiška ]] yra testo komandos sintaksė (žr vyro testas). Čia, nes mes naudojame -ne operatorius (kuris reiškia „nelygus“), bandymo komanda grąžina 0, t. y. sėkmingą, jei x reikšmė nėra 10, ir grąžina ne nulinę reikšmę, t. y. nesėkmę, jei x reikšmė yra 10.

Tada viduje padaryti... padaryta bloką, atspausdiname x reikšmę ir ją padidiname. Kai x reikšmė yra 10, testavimo komanda grąžina ne nulinę būseną, o ciklas išeina.

Pastaba: Indekso kintamasis, naudojamas while cikle, turi būti inicijuotas arba prieš while kilpą, arba sąlygų komandose, o ne for loop, kuris leidžia netiesiogiai inicijuoti kintamąjį.

Su keliomis sąlygų komandomis: Ši kilpa sukuria 5 pavadintus katalogus dir0, dir1, ... dir4.

z=0, o echo "Failų sąrašas:" ls -l [[ $z -ne 5 ]] do echo "Kuriamas dir$z..." mkdir dir$z ((z++)) baigtas

Pirmosios komandos echo "Failų sąrašas:" ir ls -l bus visiškai įvykdytas vieną kartą; jų sėkmė ar nesėkmė neturi jokios įtakos ciklo trukmei.

Tada bus vykdoma testavimo komanda, skirta patikrinti kintamojo z reikšmę. Kol z reikšmė nėra 5, testavimo komanda grąžina sėkmės būseną, todėl ciklas tęsiasi. Sąlygų komandos ir vykdomos komandos veikia tvarkingai. Čia kiekvienai iteracijai ji pirmiausia paleidžia komandą echo ir komandą ls su sąlyga, o tada 3-osios sąlygos komanda patikrins z reikšmę. Jei jis nėra 5, jis patenka į kilpą ir vykdo nurodytas komandas.

Pertrauk ir tęsk

Pertraukos pareiškimas dėl sąlyginio išėjimo

Taip pat galime naudoti sąlyginį teiginį jeigu kilpos viduje. The jeigu teiginys gali būti naudojamas su a pertrauka pareiškimas, skirtas sąlyginiam išėjimui iš ciklo.

x=0, o [[ $x -ne 10 ]] padaryti, jei [[ $x -eq 5 ]] pertrauka fi echo $x ((x++)) padaryta

Aukščiau pateiktas while ciklas spausdins skaičius nuo 0 iki 4. Tada, kai i reikšmė bus 5, ji ištrūks iš ciklo. Tai ypač naudinga, kai iš ciklo reikia išeiti, kai komanda duoda tam tikrą išvestį.

Tęskite teiginį, kad sąlygiškai praleistumėte iteraciją

Bashas taip pat turi a Tęsti teiginį, norėdami praleisti likusią ciklo iteracijos dalį, jei įvykdoma tam tikra sąlyga.

x=0, o [[ $x -ne 10 ]] padaryti, jei [[ $x -eq 5 ]] tęsti fi echo $x ((x++)) padaryta

Aukščiau pateikta kilpa atspausdins skaičius nuo 0 iki 10, išskyrus 5, nes iteracijos metu x=5 yra teiginys tęsti, kuris praleidžia visą likusį kodą ciklo pradžioje su iteracija x=6.

Ciklų naudojimas: scenarijai ir komandų eilutė

Ciklo sintaksės gali būti naudojamos Bash apvalkale tiesiogiai arba iš vykdomojo apvalkalo scenarijaus failo. Panašus į dėl ir kol kilpos, kartą an kol ciklo sintaksė įvedama apvalkale, apvalkalas tęsia raginimą, kad vartotojas galėtų tęsti komandas, kurias reikia atlikti.

Arba vartotojas gali tai išsaugoti scenarijaus faile ir vykdyti scenarijaus failą.

The #!/bin/bash pradžioje nurodo interpretatorių, kuris bus naudojamas vykdant failą. Nors Bash yra dažniausiai naudojamas apvalkalas, kai kurie vartotojai teikia pirmenybę tokiems apvalkalams kaip zsh, kuris turėtų būti nurodytas vietoje bash šio failo pradžioje.

Suteikti vykdymo leidimus šiam failui paleiskite:

chmod +x test.sh

Pagaliau, failo vykdymui, paleisti:

./test.sh

Išvada

The kol kilpa, panaši į dėl ir iki kilpos yra svarbi Bash scenarijaus funkcija. Nors ciklas naudojamas panašiai kaip ir iki ciklo, išskyrus tai, kad jis naudojamas paleisti alternatyvias komandas / programas, kai tam tikra programa sėkminga. Tai dažnai naudinga išplėstiniuose tinklo scenarijuose, sistemos priežiūros scenarijuose ir kt.