Bash 'While' Loop: Handledning och exempel

Använda "while" loop i Bash-skript för att iterera över kommando(n).

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 uppgift flera gånger. I den här artikeln kommer vi att lära oss hur man använder medan slinga i Bash.

Introduktion

De medan loop in Bash används för att utföra kommando(n) (exekverade kommandon) flera gånger baserat på utmatningen av ett annat kommando(n) (villkorskommandon). De körda kommandona fortsätter att köras tills villkorskommandot körs framgångsrikt (dvs. returnerar en 0-status. Alla kommandon i Linux returnerar 0 för framgång och ett heltal som inte är noll för misslyckande).

Om det finns flera villkorskommandon tar satsen endast hänsyn till statusen för det sista kommandot i listan, d.v.s. slingan körs tills det sista kommandot i listan körs framgångsrikt.

Allmän syntax

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

medan det är gjort

Listan med exekveringskommandon fortsätter att köras tills det sista kommandot i villkorskommandolistan körs framgångsrikt och avslutas med status 0. I iterationen, när det sista villkorskommandot misslyckas, avslutas loopen.

Användaren kan ange vilken körbar fil som helst i kommandolistorna. Det kan vara vanliga Linux-program eller anpassade användarprogram eller skript. Varje kommando ska vara antingen på en ny rad eller separerade med semikolon på samma rad.

Låt oss se några exempel.

Loopa tills en variabel har ett speciellt värde: Följande loop körs till variabelns värde x är inte lika med 10.

x=0 medan [[ $x -ne 10 ]] gör eko $x ((x++)) gjort

I varje iteration kontrollerar vi om värdet på x är 10. Värdet kontrolleras med hjälp av testa kommando. [[ Uttryck ]] är syntaxen för testkommandot (se man test). Här eftersom vi använder -nej operatorn (som står för 'inte lika med'), testkommandot returnerar 0, d.v.s. framgång, om värdet på x inte är 10, och det returnerar ett värde som inte är noll, d.v.s. misslyckande om värdet på x är 10.

Sedan inuti gör...klar block, skriver vi ut värdet på x och ökar det. När värdet på x är 10, returnerar testkommandot icke-noll status och slingan avslutas.

Notera: Indexvariabeln som ska användas i while-loopen ska initialiseras antingen före while-loopen eller i villkorskommandona, till skillnad från för loop, vilket gör det möjligt att initiera en variabel implicit.

Med flera villkorskommandon: Följande loop skapar 5 namngivna kataloger dir0, dir1, ... dir4.

z=0 medan echo "Lista med filer:" ls -l [[ $z -ne 5 ]] do echo "Skapar dir$z..." mkdir dir$z ((z++)) klar

Första kommandon echo "Lista med filer:" och ls -l kommer att köras en gång helt; deras framgång eller misslyckande har ingen som helst inverkan på hur länge slingan kommer att pågå.

Då körs testkommandot för att kontrollera värdet på variabel z. Tills värdet på z inte är 5, returnerar testkommandot framgångsstatus, och loopen fortsätter följaktligen att köras. Villkorskommandona och körda kommandon fortsätter att köras i ordning. Här, för varje iteration, kommer den först att köra echo-kommandot och ls-kommandot i condition och sedan 3rd condition-kommandot kontrollerar värdet på z. Om den inte är 5 går den in i loopen och utför de givna kommandona.

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.

x=0 medan [[ $x -ne 10 ]] gör om [[ $x -eq 5 ]] bryt fi eko $x ((x++)) gjort

Ovanstående while-loop kommer att skriva ut siffror från 0 till 4. När värdet på i är 5, kommer den att bryta sig ur slingan. Detta är särskilt användbart när en loop ska lämnas när ett kommando ger en specifik utdata.

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

Bash har 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.

x=0 medan [[ $x -ne 10 ]] gör om [[ $x -eq 5 ]] fortsätter fi echo $x ((x++)) gjort

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

Använda loopar: skript och kommandorad

Slingsyntaxerna kan användas i Bash-skalet direkt eller från en körbar skalskriptfil. Liknande för och medan loopar, en gång an medan 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 medan slinga, liknande för och fram tills loopar är en viktig funktion i Bash-skript. While loop har en liknande användning som tills loopen, förutom att den används för att köra alternativa kommandon/program när ett visst program lyckas. Detta är ofta användbart i avancerade nätverksskript, systemunderhållsskript, etc.