Bash 'For' Loop: Opplæring og eksempler

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.