Bash 'Indtil' Loop: Tutorial og eksempler

Brug af 'indtil'-løkke i et Bash-script til at gå over kommando(er).

Bash (Bourne Again Shell) er en shell-kommandoprompt og scriptsprog i GNU/Linux-operativsystemer. Det er standardskallen for de fleste Linux-distributioner.

Som de fleste scriptsprog giver Bash loop-syntakser til at gentage lignende opgaver flere gange. I denne artikel vil vi lære, hvordan du bruger så længe sløjfe i Bash.

Introduktion

Det så længe loop in Bash bruges til at udføre kommando(er) (udførte kommandoer) flere gange baseret på outputtet af en anden kommando(er) (betingelseskommandoer). De udførte kommandoer vil blive ved med at køre, indtil condition-kommandoen bliver ved med at fejle (dvs. returnerer en ikke-nul-status. Enhver kommando i Linux returnerer 0 for succes og et ikke-nul-heltal for fiasko). Dette er præcis det modsatte af mens loop, hvor de udførte kommandoer bliver ved med at køre, indtil betingelseskommandoen er vellykket.

Hvis der er flere betingelseskommandoer, tager sætningen kun status af den sidste kommando på listen, dvs. løkken vil køre, indtil den sidste kommando på listen bliver ved med at fejle.

Generel syntaks

Den generelle syntaks for så længe loop i Bash er:

indtil det er gjort

Udfør kommandolisten vil køre, indtil den sidste kommando i betingelseskommandolisten mislykkes. Når den sidste kommando er vellykket, afsluttes løkken.

Brugere kan angive enhver eksekverbar fil i kommandolisterne. Det kan være standard Linux-programmer eller brugerdefinerede brugerprogrammer eller scripts. Hver kommando skal enten være på en ny linje eller adskilt af et semikolon på samme linje.

Lad os se nogle få eksempler.

Looping indtil en variabel har en bestemt værdi: Følgende løkke udføres indtil værdien af ​​variablen x er 10.

x=0 indtil [[ $x -eq 10 ]] ekko $x ((x++)) udført

I hver iteration tjekker vi, om værdien af ​​x er 10. Værdien kontrolleres ved hjælp af prøve kommando. [[ Udtryk ]] er syntaksen for testkommando (se mand test).

Derefter inde i gør ... færdig blok, udskriver vi blot værdien af ​​x og øger den. Sløjfen afsluttes, når betingelseskommandoen er vellykket, dvs. hvornår $x er lig med 10.

Bemærk: Indeksvariablen, der skal bruges i 'indtil'-løkken, skal initialiseres enten før 'til'-løkken eller i betingelseskommandoerne, i modsætning til for loop, som gør det muligt at initialisere en variabel implicit.

Med flere betingelseskommandoer: Den følgende løkke opretter 5 navngivne mapper dir0, dir1, ... dir4.

z=0 indtil ekko "Hej" ekko "Bye" [[ $z -eq 5 ]] ekko "Opretter dir$z..." mkdir dir$z ((z++)) udført

De første kommandoer ekko "Hej" og ekko "Bye" udføres én gang fuldstændigt; deres succes eller fiasko har ingen som helst indflydelse på, hvor længe løkken vil køre.

Derefter vil testkommandoen til kontrol af værdien af ​​variabel z udføres. Indtil denne kommando bliver ved med at fejle, dvs. indtil værdien af ​​z er 5, kører betingelseskommandoerne og de udførte kommandoer i orden. Her vil den for hver iteration først køre de 2 ekko-kommandoer i tilstand og derefter 3. betingelseskommando tjekker for værdien af ​​z. Hvis den ikke er 5, går den ind i løkken og udfører de givne kommandoer.

Bryd og fortsæt

Pauseerklæring for betinget udgang

Vi kan også bruge den betingede erklæring hvis inde i løkken. Det hvis statement kan bruges med en pause en erklæring, for en betinget udgang fra løkken.

x=0 indtil [[ $x -eq 10 ]] gør hvis [[ $x -eq 5 ]] bryde fi ekko $x ((x++)) færdig

Ovenstående indtil-løkke vil udskrive tal fra 0 til 4. Når værdien af ​​i er 5, vil den bryde ud af løkken. Dette er særligt nyttigt, når en loop skal forlades, når en kommando giver et specifikt output.

Fortsæt erklæring for at springe en gentagelse betinget over

Bash har også en Blive ved sætning for at springe resterende del af en iteration over i en loop, hvis en bestemt betingelse er opfyldt.

x=0 indtil [[ $x -eq 10 ]] gør hvis [[ $x -eq 5 ]] fortsæt fi echo $x ((x++)) done

Ovenstående loop vil udskrive tal fra 0 til 10, undtagen 5, fordi under iterationen af x=5 der er en continue-sætning, som vil springe resten af ​​koden over i løkken i starten med iterationen af x=6.

Brug af loops: Scripts og kommandolinje

Sløjfesyntakserne kan bruges i Bash shell direkte eller fra en eksekverbar shell script fil. Svarende til til og mens sløjfer, en gang en så længe sløjfesyntaks indtastes på skallen, fortsætter skallen prompten for at lade brugeren fortsætte kommandoerne, der skal sløjfes.

Eller også kan brugeren gemme dette i en script-fil og udføre script-filen.

Det #!/bin/bash ved starten angiver den fortolker, der skal bruges, når filen eksekveres. Selvom Bash er den mest brugte shell i dag, foretrækker nogle brugere som shells zsh, som skal angives i stedet for bash i starten af ​​denne fil.

At give udførelsestilladelser for denne fil, kør:

chmod +x test.sh

Langt om længe, for at udføre filen, løb:

./test.sh

Konklusion

Det så længe loop er en anden vigtig funktion i Bash-scripting. Det har særlig betydning i komplekse scripts, når et bestemt sæt programmer forventes at returnere fejlstatus, og nogle andre kommando(er) skal udføres for at logge fejlen, vise fejl i detaljer eller blot udføre nogle alternative programmer.