Bash 'For' -silmukka: opetusohjelma ja esimerkkejä

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 samanlaisten tehtävien toistamiseksi useita kertoja. Tässä artikkelissa opimme käyttämään varten silmukka Bashissa.

Johdanto

Tyypillinen Bash-skripti sisältää sarjan komentoja, jotka suoritetaan peräkkäin. Muuttujia voidaan käyttää merkkijonojen, kokonaislukuindeksien, komennon tulosten jne. tallentamiseen. Silmukoita tarvitaan, kun käyttäjä haluaa suorittaa tietyn komennon useita kertoja. Se on erityisen hyödyllinen, kun yhden komennon tulos on listan muodossa, ja jokaisessa listan tuloksessa on suoritettava toinen komento.

Yleinen syntaksi

Yleinen syntaksi kohteelle varten silmukka Bashissa on:

sillä in do ... ... tehty

Tässä, on Bash-muuttuja, jonka tulee olla kelvollinen Linuxin komentotulkkimuuttujan nimi, eli nimi sisältää kirjaimien (az, AZ), numeroiden (0-9) ja alaviivan ( _ ) yhdistelmän ja sen tulee alkaa joko kirjaimella tai alaviiva.

The on joko mukautettu kokonaislukuindeksien alue, joka silmukataan, tai mukautettu luettelo kokonaisluvuista tai merkkijonoista. Se voi sisältää myös toisen Linux-komennon, mutta tällaisen komennon tulos on erotettava välilyönnillä tai rivinvaihdolla, eli Bashilla jäsennettävä listaksi (Bashin lista on pohjimmiltaan kokoelma arvoja, jotka erotetaan välilyönnillä tai rivinvaihdolla ).

Suoritettavat komennot on sijoitettava komennon sisään tehdä..tehty lohko.

Katsotaanpa muutama yksinkertainen esimerkki.

Silmukoita kokonaislukuarvoja: Seuraava koodi luo hakemistot nimeltä hakemisto1, hakemisto2, hakemisto3 aina hakemistoon 10.

for i in {1..10} do mkdir dir$i done

Kiinteiden arvojen luetteloa kiertäminen: Seuraava koodi tulostaa jokaisen merkkijonon tai kokonaisluvun annetussa kiinteässä luettelossa.

minulle Hello 1 2 3 Hei! do echo $i done

Silmukka komennon ulostulossa: Seuraava koodi silmukoi ulostulon yli ls ja tulostaa kunkin tiedoston nimen annetussa muodossa.

for i in "ls" do echo "Tiedostonimi on $i" tehty

Lausekepohjainen syntaksi

C-ohjelmointikieltä vastaava lausekepohjainen syntaksi on myös mahdollista Bashissa:

for ((lauseke 1; lauseke 2; lauseke 3)) do ... ... tehty

Tässä, Ilmaus 1 on indeksimuuttujien alustus. Ilmaus 2 on ehto, jolloin silmukasta on poistuttava; tämä ehto tarkistetaan jokaisessa iteraatiossa. Ilmaus 3 määrittää indeksimuuttujien arvon lisäyksen/vähennyksen/muutoksen

Seuraava esimerkki yksinkertaisesti tulostaa arvot välillä 0 - 4:

for ((i=0;i<5;i++)) do echo $i valmis

Seuraava esimerkki luo äärettömän silmukan, koska lausekkeita ei määritellä:

for (( ; ; )) do echo "Pysäytä painamalla Ctrl-C" valmis

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.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi tehty

Yllä oleva 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. Esimerkiksi seuraava silmukka katkeaa, jos ja kun se löytää tyhjän tiedoston.

tiedostolle `ls` do flen=`wc -c $tiedosto` if [[ "$flen" = "0 $file" ]] sitten echo "$tiedosto on tyhjä" break else echo $flen fi valmis 

Käsky wc -c tulostaa tiedoston rivien määrän . Se tulostaa sen muodossa , esimerkiksi, 10 testi.txt. Purkaudumme silmukasta, kun rivien lukumäärä on 0, eli tiedosto on tyhjä.

Jatka lausetta ohittaaksesi iteroinnin ehdollisesti

Kuten C:ssä ja monissa muissa ohjelmointikielissä, bashissa on myös a jatkaa lauseke, ohittaaksesi jäljellä olevan osan iteraatiosta silmukassa, jos tietty ehto täyttyy.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] sitten jatka fi echo $i; tehty

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

Seuraavassa esimerkissä tulostetaan tiedoston rivien määrä ja tietty iteraatio jatkaa jos se on hakemisto eikä tiedosto.

ls:n tiedostolle do if [[ -d $tiedosto ]] sitten jatka fi wc -c "$tiedosto" tehty

[[ -d $tiedosto ]] tarkistaa, onko tiedosto hakemisto. Jos on, siirrymme seuraavaan tiedostoon, eli seuraavaan iteraatioon. Jos se ei ole hakemisto, tulostamme tiedoston rivien lukumäärän käyttämällä WC -komento, kuten myös aiemmin näytettiin.

Silmukoiden käyttäminen: komentosarjat ja komentorivi

Silmukkasyntaksia voidaan käyttää Bash-shellissä suoraan tai komentosarjatiedostosta. Kerran varten 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 varten silmukka Bashissa on melko yksinkertainen ominaisuus, mutta sitä voidaan käyttää melkein kaikissa monimutkaisissa komentosarjaskenaarioissa. Sen oppiminen vie pitkälle, olitpa tavallinen tai edistynyt Linux-käyttäjä tai alat oppia automaatiota järjestelmänhallinta- ja DevOps-tehtäviin.