Bash Loops In-Dypth

Bash Loops In-Dypth
En sløyfe består av en eller flere kommandoer som utfører gjentatte ganger til en betingelse er oppfylt. For at dette skal skje, må kommandoene være i en konstruksjon. Konstruksjonen og dens kommandoer danner en sammensatt kommando. En bash -kommando går ut med null hvis det ikke var noe problem. På den annen side kommer det ut med et tall større enn null hvis det var et problem eller et problem. Utgangsstatusen til en sammensatt kommando er den til den siste kommandoen.

For å forstå denne artikkelen, bør leseren allerede vite enkle bash -kommandoer. Enhver ikke-enkel bash-kommando som brukes i denne artikkelen blir forklart. Ikke glem at bash -kommandoer kan skrives inn i en tekstfil, og tekstfilen kan kjøres ved å skrive navnet på filen (foran med sti) på terminalen, og deretter trykke Enter. Ikke glem å tillate deg selv å kjøre filen med noe sånt som:

sudo chmod +x programnavn

Artikkelinnhold

  • Basics bash loop
  • BASH BREAK OG FORTSETTE KOMMANTER
  • Nyttige sløyfeeksempler
  • Konklusjon

Basics bash loop

Bash til/ferdig sløyfe
Tenk på følgende kode:

La n = 0
til ["$ n" -EQ 5]; gjøre
ekko $ n
((++ n))
Ferdig

Utgangen er:

0
1
2
3
4

Når programmet begynner, er variabelen n erklært og null blir tildelt det. De to kommandoene før "ferdig" blir utført 5 ganger. ((++ n)) trinn n med 1 for hver iterasjon. Legg merke til posisjonene til de reserverte ordene, "til", "gjør" og "gjort". De to kommandoene gjentas til tilstanden, [“$ n” -eq 5] er oppfylt. I tilstanden betyr "-eq" "lik". Tilstanden er at verdien av n er lik 5. Merk at verdiene som gjentas begynner fra 0 til 4. Dette skyldes at for hver iterasjon er konstruksjonens tilstand, før kroppen (to kommandoer) av konstruksjonen utføres. Hvis tilstanden er falsk, ville ikke kroppen bli utført. Det reserverte ordet, "gjort", skal alltid skrives i en ny linje.

Syntaksen for til/Done Loop er:

inntil test-kommandoer; gjør følgelig kommandoer; Ferdig

Den andre semikolonet er ikke nødvendig hvis det reserverte ordet, "gjort" er skrevet på en ny linje.

Hvis tilstanden kommer ut med null, som betyr sann, blir sløyfens kropp utført. Hvis tilstanden kommer ut med et tall større enn null, noe som betyr usant, blir ikke sløyfens kropp utført.

Bash mens/done loop
Denne sløyfen ligner den til/Done Loop, bortsett fra at tilstanden må omformuleres. Begge konstruksjonene bruker det "gjør" reserverte ord. Følgende kode produserer samme utgang som før:

La n = 0
mens ["$ n" -lt 5]; gjøre
ekko $ n
((++ n));
Ferdig

I tilstanden i koden betyr "-lt" "mindre enn". Syntaksen for stund/Done Loop er:

mens test-kommandoer; gjør følgelig kommandoer; Ferdig

Bash for/done loop
Det er to syntaks for "for" -sløyfen, som er:

for ((expr1; expr2; expr3)); gjøre kommandoer; Ferdig

og

for navn [[i [ord…]]; ] gjør kommandoer; Ferdig

Følgende kode bruker den første syntaksen for å gi samme resultat, som ovenfor:

for ((n = 0; n < 5; ++n)); do
ekko $ n
Ferdig

I ((sammensatt kommando initialiserer det første uttrykket variabelen n til null. Neste uttrykk er mens tilstanden. Det siste uttrykket i doble parentes sammensatte kommando er trinnuttrykket. Så er det kroppen, som kan bestå av mer enn en kommando, og deretter "gjort".

Den andre syntaksen brukes best med en matrise - se nedenfor.

BASH BREAK OG FORTSETTE KOMMANTER

gå i stykker
Alle iterasjoner (gjentatt utførelse av kroppen) beregnet på en sløyfe må ikke nødvendigvis utføres. Break -kommandoen kan brukes til å stoppe de gjenværende iterasjonene. I følgende kode stopper iterasjonene like etter at N er lik 2.

for ((n = 0; n < 5; ++n)); do
ekko $ n
if ((n == 2)); deretter
gå i stykker
fi
Ferdig

Utgangen er:

0
1
2

I denne sløyfen har tre iterasjoner funnet sted.

Fortsette
En iterasjon kan hoppes over ved hjelp av fortsettelseskommandoen. Følgende kode illustrerer dette:

for ((n = 0; n < 5; ++n)); do
if ((n == 2)); deretter
Fortsette
fi
ekko $ n
Ferdig

Utgangen er:

0
1
3
4

Iterasjonen til Display 2 er hoppet over.

Brudd- og fortsette kommandoene kan også brukes i til/ferdig og mens/Done Loops.

Nyttige sløyfeeksempler

Inntil/ferdig sløyfeeksempel
Kommandoen for å opprette en tom tekstfil blir berørt. Følgende skript vil lage tomme tekstfiler i den gjeldende arbeidskatalogen, inntil antall opprettet filer er 4:

La i = 1
fil = "myfile"
til [$ i -eq 5]; gjøre
filnavn = "$ fil $ i.tekst"
Berør $ filnavn
((++ i))
Ferdig

Navnene på filene som er opprettet skal være myfile1.txt, myfile2.txt, myfile3.txt, og myfile4.tekst.

Den eneste semikolonen i koden kan utelates hvis "gjør" er skrevet på neste linje.

mens/Done Loop -eksempel
Kommandoen for å opprette en tom katalog er mkdir. Følgende skript vil lage tomme kataloger i den gjeldende arbeidskatalogen til antallet kataloger som er opprettet er 4:

i = 1
dir = "mydir"
mens [$ i -lt 5]; gjøre
dirname = "$ dir $ i"
mkdir $ dirname
((++ i))
Ferdig

Navnet på katalogene som er opprettet, skal være MyDir1, MyDir2, MyDir3 og MyDir4.

Den eneste semikolonen i koden kan utelates hvis "gjør" er skrevet på neste linje.

for sløyfeeksempel
Den andre syntaksen for for-loop nevnt over er:

for navn [[i [ord…]]; ] gjør kommandoer; Ferdig

Denne syntaksen brukes bedre med en liste. Enkelt sagt er syntaks:

for variabel i listen; gjøre kommandoer; Ferdig

Listen kan være en matrise. Følgende kommando leser en inngangslinje av tekst fra terminalen inn i Array ARR:

Les ARR

Når skriptet kjører, når det når denne kommandoen, vil det ta en pause (med en blinkende markør) for brukeren å legge inn inngang. Hvis brukeren typer:

en to tre

I en linje og trykker Enters Enter, da ville det første elementet i matrisen ha ordet "en", det andre ville ha ordet "to", og det tredje ville ha "tre". Merk at inngangsverdiene ble separert etter rom.

Følgende kode bruker den andre syntaks for loop for å lese og vise en inngang til skriptet:

Ekko "Skriv inn verdier og trykk Enter:"
Les ARR
for var i $ arr; gjøre
Echo $ var
Ferdig

Hvis inngangen var:

en to tre

Da ville utgangen være:

en
to
tre

Den eneste semikolonen i koden kan utelates hvis "gjør" er skrevet på neste linje.

BASH SELECT COMMAND

Den utvalgte kommandoen er egentlig ikke en sløyfe. Imidlertid innebærer det iterasjon, som ikke er kodet av programmereren. Enkelt sagt er SELECT -kommandosyntaxen:

Velg element i [liste]
gjøre
[Kommandoer]
Ferdig

Her "Select", "In", "Do" og "Done" er reservert ord. En bruk av SELECT -kommandoen er å vise elementene fra listen til terminalen. Følgende skript illustrerer dette:

Velg element i banan, sitron, oransje, pære, ananas
gjøre
gå i stykker
Ferdig

Legg merke til bruken av break -kommandoen. Utgangen er:

1) Banan,
2) sitron,
3) Oransje,
4) Pære,
5) Ananas
#?

Listen består av verdiene banan, sitron, oransje, pære og ananas. Disse verdiene er vist og nummerert. Symbolet "#?”(Og den blinkende markøren ved siden av) forventer at brukeren skal skrive inn noe og trykke på Enter -tasten. Skriv inn hva som helst, trykk deretter Enter -tasten og avslutter til slutt utførelsen av skriptet.

Legg merke til at listen er vist som en meny, nummerert, for utdataene. Med dette kan brukeren velge et element i menyen ved å skrive det tilsvarende nummeret, ved siden av “#?”, Trykk deretter Enter -tasten. Følgende skript illustrerer hvordan oransje velges ved å skrive nummer 3:

Velg element i banan, sitron, oransje, pære, ananas
gjøre
ekko $ svar
gå i stykker
Ferdig

Utgangsdisplayet er:

#? 3
deretter
3

Konklusjon

En sløyfe i bash er en konstruksjon; En konstruksjon er en sammensatt kommando. Konstruksjonens kropp har minst en kommando. Per nå har Bash bare tre løkker, som er til/ferdig, mens/ferdig, og for/ferdig. Hver sløyfe bruker det reserverte ordet "gjør". Etter at tilstanden er skrevet, bør "do" bli gitt av ';', eller skrives i neste linje i koden. Hver sløyfe tar en tilstand. Til/ferdige og mens/ferdige løkker er like. Hovedforskjellen oppstår når du koder tilstanden.

Select -kommandoen er en sammensatt kommando, men den er egentlig ikke en loop. Det lar brukeren velge et element fra en menyliste når skriptet kjører interaktivt.

Brudd- og fortsette kommandoene kan brukes i en sløyfe. Break -kommandoen kan brukes til å stoppe iterasjonene. På den annen side kan fortsettelseskommandoen brukes til å hoppe over en iterasjon.

Det er alt det er å basere løkker. Funksjonen som gjenstår å studere er “Hvordan kode forholdene?”. Dette fortjener en helt annen artikkel og kan ikke inkluderes i denne. Se artikkelen på dette nettstedet, med tittelen “Bash Conditionals In-Dypth”, om hvordan du koder betingelser.

Chrys