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.