Bash 'For' Loop: Handledning och exempel

Bash (Bourne Again Shell) är en skalkommandotolk och ett skriptspråk i GNU/Linux operativsystem. Det är standardskalet för de flesta Linux-distributioner.

Liksom de flesta skriptspråk tillhandahåller Bash loopsyntaxer för att upprepa liknande uppgifter flera gånger. I den här artikeln kommer vi att lära oss hur man använder för slinga i Bash.

Introduktion

Ett typiskt Bash-skript innehåller en serie kommandon som ska köras efter varandra. Variabler kan användas för att lagra strängar, heltalsindexvärden, resultat av ett kommando, etc. Slingor krävs när användaren vill utföra ett visst kommando flera gånger. Det är särskilt användbart när utmatningen av ett kommando är i form av en lista, och på varje resultat, i listan, ska ett andra kommando köras.

Allmän syntax

Den allmänna syntaxen för för loop i Bash är:

för in do ... ... gjort

Här, den är en Bash-variabel, som måste vara ett giltigt Linux-skalvariabelnamn, dvs namnet innehåller en kombination av bokstäver (az, AZ), siffror (0-9) och understreck ( _ ) och det måste börja med antingen en bokstav eller ett understreck.

De är antingen ett anpassat intervall av heltalsindex som kommer att loopas eller en anpassad lista med heltal eller strängar. Det kan också innehålla ett annat Linux-kommando, men utdata från ett sådant kommando måste separeras med mellanslag eller nyradstecken, dvs. kan analyseras av Bash till en lista (En lista i Bash är i grunden en samling värden separerade med ett mellanslag eller en nyrad ).

Oavsett vilket eller vilka kommandon som ska utföras måste placeras inuti gör..klar blockera.

Låt oss se några enkla exempel.

Loopar på en rad heltalsvärden: Följande kod skapar kataloger med namnet dir1, dir2, dir3 upp till dir10.

för i i {1..10} gör mkdir dir$i klar

Loopar på en lista med fasta värden: Följande kod skriver ut varje sträng eller heltal i den givna fasta listan.

för jag i Hej 1 2 3 Hejdå! gör echo $i done

Loopar vid utmatning av ett kommando: Följande kod loopar över utdata från ls och skriver ut namnet på varje fil i det angivna formatet.

för i i `ls` gör echo "Filnamn är $i" gjort

Uttrycksbaserad syntax

En uttrycksbaserad syntax som liknar programmeringsspråket C är också möjlig i Bash:

för ((Uttryck 1; Uttryck 2; Uttryck 3)) gör ... ... gjort

Här, Uttryck 1 är initieringen av indexvariablerna. Uttryck 2 är tillståndet när slingan måste lämnas; detta tillstånd kontrolleras i varje iteration. Uttryck 3 anger ökningen/minskningen/ändringen i värdet av indexvariablerna

Följande exempel skriver helt enkelt ut värden från 0 till 4:

för ((i=0;i<5;i++)) gör echo $i done

Följande exempel skapar en oändlig loop, eftersom inga uttryck anges:

för (( ; ; )) gör echo "Tryck på Ctrl-C för att stoppa" gjort

Bryt och fortsätt

Avbrottsuttalande för villkorlig utträde

Vi kan också använda det villkorliga uttalandet om inuti slingan. De om uttalande kan användas med en ha sönder uttalande, för en villkorad utgång från slingan.

för ((i=0;i<10;i++)) gör om [[ $i -eq 5 ]] så bryt annars eko $i; fi gjort

Ovanstående loop kommer att skriva ut siffror från 0 till 4. När sedan värdet på i är 5, kommer den att bryta ut ur loopen. Detta är särskilt användbart när en loop ska lämnas när ett kommando ger en specifik utdata. Till exempel bryts följande loop om och när den hittar en tom fil.

för fil i `ls` do flen=`wc -c $file` om [[ "$flen" = "0 $file" ]] sedan eko "$filen är tom" break else echo $flen fi klar 

Kommandot wc -c skriver ut antalet rader i filen . Den skriver ut den i formatet , till exempel, 10 test.txt. Vi bryter oss ur slingan när antalet rader är 0, det vill säga en tom fil.

Fortsätt uttalande för att hoppa över en iteration villkorligt

I likhet med C och många andra programmeringsspråk har bash också en Fortsätta uttalande, för att hoppa över återstående del av en iteration i en loop om ett visst villkor är uppfyllt.

för ((i=0;i<10;i++)) gör om [[ $i -eq 5 ]] fortsätt sedan fi echo $i; Gjort

Ovanstående loop kommer att skriva ut nummer från 0 till 10, förutom 5, eftersom under iterationen av i=5 det finns en continue-sats, som kommer att hoppa över resten av koden i slingan i början med iterationen av i=6.

I följande exempel skriver vi ut antalet rader i en fil, och en viss iteration kommer att göra det Fortsätta om det är en katalog och inte en fil.

för fil i `ls` gör om [[ -d $file ]] fortsätt sedan fi wc -c "$file" klar

[[ -d $fil ]] kontrollerar om filen är en katalog. Om det är det, hoppar vi över till nästa fil, dvs nästa iteration. Om det inte är en katalog skriver vi ut antalet rader i filen med hjälp av toalett kommando, som visats tidigare.

Använda loopar: skript och kommandorad

Loopsyntaxen kan användas i Bash-skalet direkt eller från en skalskriptfil. En gång för loopsyntax skrivs in på skalet, fortsätter skalet uppmaningen för att låta användaren fortsätta kommandona som ska loopas.

Annars kan användaren spara detta i en skriptfil och köra skriptfilen.

De #!/bin/bash vid starten anger tolken som ska användas när filen körs. Även om Bash är det mest använda skalet nuförtiden, föredrar vissa användare skal som zsh, som bör anges i stället för bash i början av den här filen.

För att ge exekveringsbehörigheter för denna fil, kör:

chmod +x test.sh

Till sist, för att köra filen, springa:

./test.sh

Slutsats

De för loop in Bash är en ganska enkel funktion men har sin användning i nästan alla typer av komplexa skriptscenario. Att lära sig det går långt oavsett om du är en vanlig eller avancerad Linux-användare, eller börjar lära dig automatisering för systemadministration och DevOps-uppgifter.