Bash (Bourne Again Shell) er en shell-ledetekst og skriptspråk i GNU/Linux-operativsystemer. Det er standardskallet for de fleste Linux-distribusjoner.
Som de fleste skriptspråk, tilbyr Bash loop-syntakser for å gjenta lignende oppgaver flere ganger. I denne artikkelen lærer vi hvordan du bruker til
loop i Bash.
Introduksjon
Et typisk Bash-skript inneholder en rekke kommandoer som skal utføres etter hverandre. Variabler kan brukes til å lagre strenger, heltallsindeksverdier, resultater av en kommando, osv. Loops kreves når brukeren ønsker å utføre en bestemt kommando flere ganger. Det er spesielt nyttig når utdata fra én kommando er i form av en liste, og på hvert resultat i listen skal en andre kommando kjøres.
Generell syntaks
Den generelle syntaksen for til
loop i Bash er:
for i gjøre ... ... gjort
Her, den er en Bash-variabel, som må være et gyldig Linux-shell-variabelnavn, dvs. navnet inneholder en kombinasjon av bokstaver (az, AZ), tall (0-9) og understrek ( _ ), og det må starte med enten en bokstav eller en understreking.
De er enten et egendefinert område med heltallsindekser som skal sløyfes eller en egendefinert liste over heltall eller strenger. Den kan også inneholde en annen Linux-kommando, men utdata fra en slik kommando må skilles med mellomrom eller linjeskifttegn, dvs. kan parses av Bash til en liste (En liste i Bash er i utgangspunktet en samling verdier atskilt med et mellomrom eller en nylinje ).
Hvilken kommando(er) som skal utføres må plasseres inne i gjøre..ferdig
blokkere.
La oss se noen få enkle eksempler.
Løkker på en rekke heltallsverdier: Følgende kode lager kataloger kalt dir1, dir2, dir3 opp til dir10.
for i i {1..10} gjør mkdir dir$i ferdig
Sløyfe på en liste med faste verdier: Følgende kode skriver ut hver streng eller heltall i den gitte faste listen.
for i in Hello 1 2 3 Bye! gjør ekko $i ferdig
Looping på utdata av en kommando: Følgende kode går over utdata av ls
og skriver ut navnet på hver fil i det gitte formatet.
for i i `ls` gjør ekko "Filnavn er $i" ferdig
Uttrykksbasert syntaks
En uttrykksbasert syntaks som ligner på C programmeringsspråk er også mulig i Bash:
for ((Uttrykk 1; Uttrykk 2; Uttrykk 3)) gjør ... ... ferdig
Her, Uttrykk 1
er initialiseringen av indeksvariabelen(e). Uttrykk 2
er tilstanden når løkken må forlates; denne tilstanden sjekkes i hver iterasjon. Uttrykk 3
spesifiserer økningen/reduksjonen/endringen i verdien av indeksvariabelen(e)
Følgende eksempel skriver bare ut verdier fra 0 til 4:
for ((i=0;i<5;i++)) gjør echo $i ferdig
Følgende eksempel oppretter en uendelig løkke, siden ingen uttrykk er spesifisert:
for (( ; ; )) gjør ekko "Trykk Ctrl-C for å stoppe" ferdig
Bryt og fortsett
Pauseerklæring for betinget utgang
Vi kan også bruke vilkårserklæringen hvis
inne i løkken. De hvis
uttalelse kan brukes med en gå i stykker
uttalelse, for en betinget utgang fra loopen.
for ((i=0;i<10;i++)) gjør hvis [[ $i -eq 5 ]] så bryter else echo $i; fi ferdig
Sløyfen ovenfor vil skrive ut tall fra 0 til 4. Når verdien av i er 5, vil den bryte ut av løkken. Dette er spesielt nyttig når en sløyfe skal avsluttes når en kommando gir en bestemt utgang. For eksempel brytes følgende løkke hvis og når den finner en tom fil.
for fil i `ls` do flen=`wc -c $file` hvis [[ "$flen" = "0 $fil" ]] så ekko "$filen er tom" break else echo $flen fi ferdig
Kommandoen wc -c
skriver ut antall linjer i filen . Den skriver den ut i formatet
, for eksempel,
10 test.txt
. Vi bryter ut av løkken når antall linjer er 0, dvs. en tom fil.
Fortsett utsagn for å hoppe over en gjentakelse betinget
I likhet med C og mange andre programmeringsspråk, har bash også en Fortsette
setning, for å hoppe over gjenværende del av en iterasjon i en loop hvis en bestemt betingelse er oppfylt.
for ((i=0;i<10;i++)) gjør hvis [[ $i -eq 5 ]] så fortsett fi echo $i; ferdig
Ovennevnte løkke vil skrive ut tall fra 0 til 10, bortsett fra 5, fordi under iterasjonen av i=5
det er en continue-setning, som vil hoppe over resten av koden i løkken i starten med iterasjonen av i=6
.
I følgende eksempel skriver vi ut antall linjer i en fil, og en bestemt iterasjon vil Fortsette
hvis det er en katalog og ikke en fil.
for fil i `ls` gjør hvis [[ -d $fil ]] så fortsett fi wc -c "$file" ferdig
[[ -d $fil ]]
sjekker om filen er en katalog. Hvis det er det, hopper vi over til neste fil, dvs. neste iterasjon. Hvis det ikke er en katalog, skriver vi ut antall linjer i filen vha toalett
kommando, som vist tidligere også.
Bruke løkker: Skript og kommandolinje
Løkkesyntaksen kan brukes i Bash shell direkte, eller fra en shell script-fil. En gang en til
løkkesyntaks legges inn på skallet, fortsetter skallet ledeteksten for å la brukeren fortsette kommandoene som skal løkkes.
Eller så kan brukeren lagre dette i en skriptfil og kjøre skriptfilen.
De #!/bin/bash
ved starten spesifiserer tolken som skal brukes når filen kjøres. Selv om Bash er det mest brukte skallet i dag, foretrekker noen brukere skall som zsh
, som bør spesifiseres i stedet for bash i starten av denne filen.
For å gi utførelsestillatelser for denne filen, kjør:
chmod +x test.sh
Til slutt, for å kjøre filen, løpe:
./test.sh
Konklusjon
De til
loop in Bash er en ganske enkel funksjon, men har sin bruk i nesten alle slags komplekse skriptscenarioer. Å lære det går langt enten du er en vanlig eller avansert Linux-bruker, eller begynner å lære automatisering for systemadministrasjon og DevOps-oppgaver.