Bash 'While' Loop: Tutorial og eksempler

Brug af 'while' loop i Bash-scripting til at iterere 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 opgave flere gange. I denne artikel vil vi lære, hvordan du bruger mens sløjfe i Bash.

Introduktion

Det mens 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 fortsætter med at køre, indtil betingelseskommandoen kører med succes (dvs. returnerer en 0-status. Enhver kommando i Linux returnerer 0 for succes og et heltal, der ikke er nul for fiasko).

Hvis der er flere betingelseskommandoer, tager sætningen kun status af den sidste kommando på listen, dvs. løkken udføres, indtil den sidste kommando på listen kører med succes.

Generel syntaks

Den generelle syntaks for mens loop i Bash er:

mens du er færdig

Udfør kommandolisten vil fortsætte med at køre, indtil den sidste kommando i betingelseskommandolisten kører med succes og afsluttes med status 0. I iterationen, når den sidste betingelseskommando mislykkes, afsluttes løkken.

Brugeren 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 ikke lig med 10.

x=0 mens [[ $x -ne 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). Her siden vi bruger -nej operatør (som står for 'ikke lig med'), testkommandoen returnerer 0, dvs. succes, hvis værdien af ​​x ikke er 10, og den returnerer en værdi, der ikke er nul, dvs. fejl, hvis værdien af ​​x er 10.

Derefter inde i gør ... færdig blok, udskriver vi værdien af ​​x og øger den. Når værdien af ​​x er 10, returnerer testkommandoen ikke-nul-status, og løkken afsluttes.

Bemærk: Indeksvariablen, der skal bruges i while-løkken, skal initialiseres enten før while-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 mens echo "Liste over filer:" ls -l [[ $z -ne 5 ]] do echo "Opretter dir$z..." mkdir dir$z ((z++)) udført

Første kommandoer echo "Liste over filer:" og ls -l vil udføre é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 værdien af ​​z ikke er 5, returnerer testkommandoen successtatus, og loop fortsætter derfor med at køre. Betingelseskommandoerne og udførte kommandoer kører fortsat i orden. Her vil den for hver iteration først køre ekko-kommandoen og ls-kommandoen i condition og derefter 3rd condition-kommando 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 erklæring, for en betinget udgang fra løkken.

x=0 mens [[ $x -ne 10 ]] gør hvis [[ $x -eq 5 ]] bryde fi ekko $x ((x++)) udført

Ovenstående while-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 mens [[ $x -ne 10 ]] gør hvis [[ $x -eq 5 ]] fortsæt fi ekko $x ((x++)) færdig

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 mens 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 mens sløjfe, svarende til til og så længe loops er en vigtig funktion i Bash-scripting. Mens loop har en lignende anvendelse som indtil loop, bortset fra at den bruges til at køre alternative kommandoer/programmer, når et bestemt program lykkes. Dette finder ofte sin nytte i avancerede netværksscripts, systemvedligeholdelsesscripts osv.