Bash 'While' -silmukka: opetusohjelma ja esimerkkejä

'while'-silmukan käyttäminen Bash-komentosarjassa komentojen toistamiseen.

Bash (Bourne Again Shell) on komentotulkin komentokehote ja komentosarjakieli GNU/Linux-käyttöjärjestelmissä. Se on oletuskuori useimmille Linux-jakeluille.

Kuten useimmat skriptikielet, Bash tarjoaa silmukkasyntaksia samanlaisen tehtävän toistamiseksi useita kertoja. Tässä artikkelissa opimme käyttämään sillä aikaa silmukka Bashissa.

Johdanto

The sillä aikaa silmukkaa Bashissa käytetään komentojen (suoritetut komennot) suorittamiseen useita kertoja toisen komennon (ehtokomennot) tulosteen perusteella. Suoritetut komennot jatkuvat, kunnes ehtokomento suoritetaan onnistuneesti (eli palauttaa 0-tilan. Mikä tahansa komento Linuxissa palauttaa 0:n onnistumisesta ja ei-nollan kokonaisluvun epäonnistumisesta).

Jos ehtokomentoja on useita, käsky ottaa huomioon vain luettelon viimeisen komennon tilan, eli silmukka suoritetaan, kunnes luettelon viimeinen komento suoritetaan onnistuneesti.

Yleinen syntaksi

Yleinen syntaksi kohteelle sillä aikaa silmukka Bashissa on:

kun on tehty

Suorita komentoluettelo jatkuu, kunnes ehdokomentoluettelon viimeinen komento suoritetaan onnistuneesti ja poistuu tilalla 0. Iteraatiossa silmukka poistuu, kun viimeinen ehtokomento epäonnistuu.

Käyttäjä voi määrittää minkä tahansa suoritettavan tiedoston komentoluetteloista. Se voi olla tavallisia Linux-ohjelmia tai mukautettuja käyttäjäohjelmia tai komentosarjoja. Jokainen komento tulee olla joko uudella rivillä tai erotettava puolipisteellä samalla rivillä.

Katsotaanpa muutamia esimerkkejä.

Silmukoita, kunnes muuttujalla on tietty arvo: Seuraava silmukka suoritetaan muuttujan arvoon asti x ei ole yhtä kuin 10.

x=0, kun [[ $x -ne 10 ]] kaiku $x ((x++)) valmis

Jokaisessa iteraatiossa tarkistamme, onko x:n arvo 10. Arvoa tarkistetaan käyttämällä testata komento. [[ Ilmaisu ]] on testikomennon syntaksi (katso mies testi). Täällä koska käytämme -ei -operaattori (joka tarkoittaa 'ei yhtä suuri'), testikomento palauttaa 0:n eli onnistumisen, jos x:n arvo ei ole 10, ja se palauttaa nollasta poikkeavan arvon, eli epäonnistumisen, jos x:n arvo on 10.

Sitten sisällä tehdä... tehty lohko, tulostamme x:n arvon ja lisäämme sitä. Kun x:n arvo on 10, testikomento palauttaa nollasta poikkeavan tilan ja silmukka poistuu.

merkintä: While-silmukassa käytettävä indeksimuuttuja on alustettava joko ennen while-silmukkaa tai ehtokomentoissa, toisin kuin for-silmukassa, joka mahdollistaa muuttujan alustamisen implisiittisesti.

Useilla ehtokomennoilla: Seuraava silmukka luo 5 hakemistoa nimeltä hakemisto0, hakemisto1, ... hakemisto4.

z=0, kun echo "Tiedostoluettelo:" ls -l [[ $z -ne 5 ]] do echo "Luodaan dir$z..." mkdir dir$z ((z++)) valmis

Ensimmäiset käskyt echo "Tiedostoluettelo:" ja ls -l suoritetaan kerran kokonaan; niiden onnistumisella tai epäonnistumisella ei ole mitään vaikutusta silmukan kestoon.

Sitten suoritetaan testikomento muuttujan z arvon tarkistamiseksi. Kunnes z:n arvo ei ole 5, testikomento palauttaa onnistumistilan, ja siten silmukka jatkuu. Ehtokomennot ja suoritetut komennot jatkuvat järjestyksessä. Tässä jokaiselle iteraatiolle se suorittaa ensin echo-komennon ja ls-komennon in condition ja sitten 3. ehtokomento tarkistaa z:n arvon. Jos se ei ole 5, se siirtyy silmukkaan ja suorittaa annetut komennot.

Tauko ja jatka

Katkoilmoitus ehdollista poistumista varten

Voimme käyttää myös ehdollista lausetta jos silmukan sisällä. The jos lausetta voidaan käyttää a tauko lauseke ehdolliseen silmukasta poistumiseen.

x=0, kun taas [[ $x -ne 10 ]] tee jos [[ $x -eq 5 ]] break fi echo $x ((x++)) valmis

Yllä oleva while-silmukka tulostaa numeroita välillä 0 - 4. Sitten kun i:n arvo on 5, se katkeaa silmukasta. Tämä on erityisen hyödyllistä, kun silmukasta on poistuttava, kun komento antaa tietyn tulosteen.

Jatka lausetta ohittaaksesi iteroinnin ehdollisesti

Bashilla on myös a jatkaa lauseke, ohittaaksesi jäljellä olevan osan iteraatiosta silmukassa, jos tietty ehto täyttyy.

x=0, kun taas [[ $x -ne 10 ]] tee jos [[ $x -eq 5 ]] jatka fi echo $x ((x++)) valmis

Yllä oleva silmukka tulostaa numerot 0-10, paitsi 5, koska iteroinnin aikana x=5 on jatka-käsky, joka ohittaa loput koodista silmukassa iteroinnin alussa x=6.

Silmukoiden käyttäminen: komentosarjat ja komentorivi

Silmukkasyntakseja voidaan käyttää Bash shellissä suoraan tai suoritettavasta shell-skriptitiedostosta. Samanlainen kuin varten ja sillä aikaa silmukat, kerran an sillä aikaa silmukan syntaksi syötetään komentotulkkiin, komentotulkki jatkaa kehotetta antaakseen käyttäjän jatkaa silmukoitavia komentoja.

Tai muuten käyttäjä voi tallentaa tämän komentosarjatiedostoon ja suorittaa komentosarjatiedoston.

The #!/bin/bash alussa määrittää tulkin, jota käytetään, kun tiedosto suoritetaan. Vaikka Bash on yleisimmin käytetty kuori nykyään, jotkut käyttäjät pitävät enemmän sellaisista kuorista kuin zsh, joka tulee määrittää bashin tilalle tämän tiedoston alussa.

Suoritusoikeuksien myöntäminen suorita tälle tiedostolle:

chmod +x test.sh

Lopuksi, suorittaaksesi tiedoston, juosta:

./test.sh

Johtopäätös

The sillä aikaa silmukka, samanlainen kuin varten ja siihen asti kun silmukat ovat tärkeä ominaisuus Bash-komentosarjassa. Vaikka silmukalla on samanlainen käyttö kuin till-silmukalla, paitsi että sitä käytetään vaihtoehtoisten komentojen/ohjelmien suorittamiseen, kun tietty ohjelma onnistuu. Tästä on usein hyötyä kehittyneissä verkkoskripteissä, järjestelmän ylläpitoskripteissä jne.