„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.