Bash 'Tills' Loop: Handledning och exempel

Använda "tills" loop i ett Bash-skript för att loopa ö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 uppgifter flera gånger. I den här artikeln kommer vi att lära oss hur man använder fram tills slinga i Bash.

Introduktion

De fram tills 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 fortsätter att misslyckas (dvs. returnerar en status som inte är noll. Alla kommandon i Linux returnerar 0 för framgång och ett heltal som inte är noll för misslyckande). Detta är precis motsatsen till medan loop, där de körda kommandona fortsätter att köras tills villkorskommandot lyckas.

Om det finns flera villkorskommandon, tar satsen endast hänsyn till statusen för det sista kommandot i listan, d.v.s. slingan kommer att köras tills det sista kommandot i listan fortsätter att misslyckas.

Allmän syntax

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

tills det är gjort

Utför kommandolistan kommer att köras tills det sista kommandot i villkorskommandolistan misslyckas. När det sista kommandot är framgångsrikt avslutas loopen.

Användare 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 10.

x=0 tills [[ $x -eq 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).

Sedan inuti gör...klar block, skriver vi helt enkelt ut värdet på x och ökar det. Slingan avslutas när villkorskommandot är framgångsrikt, dvs när $x är lika med 10.

Notera: Indexvariabeln som ska användas i "tills"-loopen ska initialiseras antingen före "tills"-loopen eller i villkorskommandona, i motsats till 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 tills eko "Hej" eko "Bye" [[ $z -eq 5 ]] gör eko "Skapar dir$z..." mkdir dir$z ((z++)) klar

De första kommandona ekar "Hej" och eko "Bye" 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 detta kommando fortsätter att misslyckas, d.v.s. tills värdet på z är 5, fortsätter villkorskommandona och exekverade kommandon att köras i ordning. Här, för varje iteration, kommer den först att köra de två ekokommandona i tillstånd och sedan kontrollerar det tredje tillståndskommandot för värdet av 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 ett uttalande för ett villkorligt utträde ur slingan.

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

Ovanstående till-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 tills [[ $x -eq 10 ]] gör om [[ $x -eq 5 ]] fortsätt fi echo $x ((x++)) done

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 fram tills 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 fram tills loop är en annan viktig funktion i Bash-skript. Det är särskilt viktigt i komplexa skript när en viss uppsättning program förväntas returnera felstatus, och några andra kommandon ska utföras för att logga felet, visa fel i detalj eller helt enkelt köra några alternativa program.