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.