Bash 'While' Loop: Opplæring og eksempler

Bruke 'while' loop i Bash-skripting for å iterere over kommando(er).

Bash (Bourne Again Shell) er en shell-ledetekst og skriptspråk i GNU/Linux-operativsystemer. Det er standardskallet for de fleste Linux-distribusjoner.

Som de fleste skriptspråk, tilbyr Bash loop-syntakser for å gjenta lignende oppgave flere ganger. I denne artikkelen lærer vi hvordan du bruker samtidig som loop i Bash.

Introduksjon

De samtidig som loop in Bash brukes til å utføre kommando(er) (utførte kommandoer) flere ganger basert på utdata fra en annen kommando(er) (tilstandskommandoer). De utførte kommandoene vil fortsette å kjøre til condition-kommandoen kjører vellykket (dvs. returnerer en 0-status. Enhver kommando i Linux returnerer 0 for suksess og et heltall som ikke er null for feil).

Hvis det er flere betingelseskommandoer, vurderer setningen bare statusen til den siste kommandoen i listen, dvs. at løkken utføres til den siste kommandoen i listen kjører vellykket.

Generell syntaks

Den generelle syntaksen for samtidig som loop i Bash er:

mens du er ferdig

Utfør kommandolisten vil fortsette å kjøre til den siste kommandoen i betingelseskommandolisten kjører vellykket og avsluttes med status 0. I iterasjonen, når den siste betingelseskommandoen mislykkes, avsluttes løkken.

Brukeren kan spesifisere hvilken som helst kjørbar fil i kommandolistene. Det kan være standard Linux-programmer eller tilpassede brukerprogrammer eller skript. Hver kommando skal enten være på en ny linje eller atskilt med et semikolon på samme linje.

La oss se noen eksempler.

Looping til en variabel har en bestemt verdi: Følgende løkke kjøres til verdien av variabelen x er ikke lik 10.

x=0 mens [[ $x -ne 10 ]] gjør ekko $x ((x++)) ferdig

I hver iterasjon sjekker vi om verdien av x er 10. Verdien sjekkes ved å bruke test kommando. [[ Uttrykk ]] er syntaksen for testkommando (se mann test). Her siden vi bruker -ne operatør (som står for "ikke lik"), returnerer testkommandoen 0, dvs. suksess, hvis verdien av x ikke er 10, og den returnerer en verdi som ikke er null, dvs. feil hvis verdien av x er 10.

Så inne i gjør...ferdig blokk, skriver vi ut verdien av x og øker den. Når verdien av x er 10, returnerer testkommandoen ikke-null-status, og sløyfen avsluttes.

Merk: Indeksvariabelen som skal brukes i while-løkken skal initialiseres enten før while-løkken eller i betingelseskommandoene, i motsetning til for loop, som gjør det mulig å initialisere en variabel implisitt.

Med flere betingelseskommandoer: Følgende sløyfe oppretter 5 navngitte kataloger dir0, dir1, ... dir4.

z=0 mens ekko "Liste over filer:" ls -l [[ $z -ne 5 ]] gjør ekko "Oppretter dir$z..." mkdir dir$z ((z++)) ferdig

Første kommandoer echo "Liste over filer:" og ls -l vil kjøre en gang fullstendig; deres suksess eller fiasko har ingen som helst innvirkning på hvor lenge sløyfen vil løpe.

Deretter vil testkommandoen for å kontrollere verdien av variabel z utføres. Inntil verdien av z ikke er 5, returnerer testkommandoen suksessstatus, og løkken fortsetter derfor å kjøre. Tilstandskommandoene og de utførte kommandoene fortsetter å kjøre i rekkefølge. Her, for hver iterasjon, vil den først kjøre ekko-kommandoen og ls-kommandoen i condition og deretter 3rd condition-kommando sjekker for verdien av z. Hvis den ikke er 5, går den inn i loopen og utfører de gitte kommandoene.

Bryt og fortsett

Pauseerklæring for betinget utgang

Vi kan også bruke vilkårserklæringen hvis inne i løkken. De hvis uttalelse kan brukes med en gå i stykker uttalelse, for en betinget utgang fra loopen.

x=0 mens [[ $x -ne 10 ]] gjør hvis [[ $x -eq 5 ]] bryte fi ekko $x ((x++)) ferdig

Mens-løkken ovenfor vil skrive ut tall fra 0 til 4. Når verdien av i er 5, vil den bryte ut av løkken. Dette er spesielt nyttig når en sløyfe skal avsluttes når en kommando gir en bestemt utgang.

Fortsett utsagn for å hoppe over en gjentakelse betinget

Bash har også en Fortsette setning, for å hoppe over gjenværende del av en iterasjon i en loop hvis en bestemt betingelse er oppfylt.

x=0 mens [[ $x -ne 10 ]] gjør hvis [[ $x -eq 5 ]] fortsetter fi ekko $x ((x++)) ferdig

Ovennevnte løkke vil skrive ut tall fra 0 til 10, bortsett fra 5, fordi under iterasjonen av x=5 det er en continue-setning, som vil hoppe over resten av koden i løkken i starten med iterasjonen av x=6.

Bruke løkker: Skript og kommandolinje

Løkkesyntaksene kan brukes i Bash shell direkte eller fra en kjørbar shell script-fil. Lik til og samtidig som løkker, en gang en samtidig som løkkesyntaks legges inn på skallet, fortsetter skallet ledeteksten for å la brukeren fortsette kommandoene som skal løkkes.

Eller så kan brukeren lagre dette i en skriptfil og kjøre skriptfilen.

De #!/bin/bash ved starten spesifiserer tolken som skal brukes når filen kjøres. Selv om Bash er det mest brukte skallet i dag, foretrekker noen brukere skall som zsh, som bør spesifiseres i stedet for bash i starten av denne filen.

For å gi utførelsestillatelser for denne filen, kjør:

chmod +x test.sh

Til slutt, for å kjøre filen, løpe:

./test.sh

Konklusjon

De samtidig som løkke, lik til og før loops er en viktig funksjon i Bash-skripting. Mens loop har en lignende bruk som til-løkken, bortsett fra at den brukes til å kjøre alternative kommandoer/programmer når et bestemt program lykkes. Dette finner ofte nytten i avanserte nettverksskript, systemvedlikeholdsskript, etc.