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