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.