I programmering eller skripting er sløyfen et av de mest grunnleggende og kraftige konseptene. En sløyfe utfører visse oppgaver til de angitte vilkårene er oppfylt. Hvert programmerings- eller skriptspråk har forskjellige måter å implementere konseptet på.
I denne guiden, sjekk ut den nestede sløyfen i bash scripting.
Nestet løkke
En sløyfe, per definisjon, utfører visse oppgaver til vilkårene er oppfylt. Hva om oppgaven inkluderer å kjøre en løkke? Dette er konseptet med en nestet løkke. En løkke i en løkke.
Dette er den grunnleggende strukturen til en sløyfe.
mens (tilstand)# noe
Her vil mens loop fortsette å utføre oppgavene som er erklært inne i blokken så lenge betingelsen er oppfylt. I tilfelle en nestet mens sløyfe, vil strukturen se slik ut.
# hovedsløyfemens (tilstand)
# nestet løkke
mens (tilstand)
# noe
I teorien kan nestede løkker gå til uendelig dybde. I mange situasjoner kan nestede løkker være den perfekte løsningen.
Loop i bash script
Bash er et kraftig skriptspråk. Det er forskjellige sløyfestrukturer i bash. De mest populære er for, mens og til løkker. Hvis du er kjent med C / C ++ programmering før, vil syntaksen definitivt se ganske like ut.
For løkker
For loop er en av de vanligste og mest allsidige formutgangene osv. Strukturen til sløyfer i bash scripting. Strukturen ligner også mye på loop i C / C ++.
Strukturen på for loop in bash er som følger.
for ((initialisere; tilstand; økning)); gjøre# noe
ferdig
Strukturen er veldig selvforklarende. Initialiseringsdelen er ikke obligatorisk. Imidlertid er tilstanden og økningen høyere prioritert.
La oss sette det i verk. Her er et veldig forenklet bash-skript som implementeres for loop.
for ((i = 0; i < 5 ; i++)); doekko "hei verden"
ferdig
Det er også mulig å bruke liste / område som løkkebetingelse. Det er spesielt nyttig hvis du arbeider med en liste over filer, antall områder, matriser, kommandoutganger osv. Strukturen ser omtrent slik ut.
for vare i- ; gjøre
- Bash uendelig løkke
- Brukerinngang fra Bash-skript
- Bash-funksjon returnerer matrise
# noe
ferdig
For eksempel vil følgende skript skrive ut “hei verden” fem ganger.
for jeg i 1… 5; gjøreekko "hei verden"
ferdig
Hva om vi trenger å jobbe med innholdet i en katalog? I det følgende eksemplet vil skriptet skrive ut alle filene i / usr / bin-katalogen.
for i i / usr / bin / *; gjøreekko $ i
ferdig
Nå, hva gjør vi for å ha en nestet for loop? Det er bare en for løkke inne i en annen. Her er en nestet for loop ved hjelp av forrige eksempel.
for ((i = 0; i < 3 ; i++)); dofor ((j = 0; j < 2 ; j++)); do
ekko "hei verden"
ferdig
ferdig
Produksjonen vil være “hei verden” 6 ganger. Den ytre sløyfen vil kjøre tre ganger, og kjøre den indre sløyfen to ganger.
Mens løkker
Mens loop er en annen populær og intuitiv sløyfe tilgjengelig i bash scripting. Syntaksen ser slik ut.
samtidig som# noe
ferdig
I det følgende eksemplet vil manuset skrive ut “hei verden” fem ganger.
num = 1mens [$ num -le 5]; gjøre
ekko "hei verden"
num = $ (($ num + 1))
ferdig
Hvordan ville det se ut å ha en nestet mens løkke? Her er et enkelt eksempel.
num_a = 1num_b = 1
mens [$ num_a -le 5]; gjøre
mens [$ num_b -le 5]; gjøre
ekko "hei verden"
num_b = $ (($ num_b + 1))
ferdig
num_a = $ (($ num_a + 1))
ferdig
Inntil løkker
Hvis du har en programmeringsbakgrunn i C / C ++, er du kjent med gjør-mens-sløyfen. Dessverre har bash ikke noe sånt. Imidlertid inntil løkken fungerer på en lignende måte. Syntaksen ser også ganske likt ut.
før [# noe
ferdig
Forskjellen mellom mens og til løkken er testtilstanden. Så lenge testtilstanden er oppfylt, fortsetter en stund-løkke. En til-løkke vil imidlertid fortsette å kjøre bare hvis tilstanden er falsk.
Her er et raskt eksempel på mens løkken. Det vil trykke multiplikasjonstabellen på 2.
num_a = 1til [$ num_a -gt 10]; gjøre
ekko $ (($ num_a * 2))
num_a = $ (($ num_a + 1))
ferdig
Loop break
I visse situasjoner, hvis visse vilkår er oppfylt, blir det å kjøre resten av løkken overflødig. Loop break er en interessant funksjon som gjør det mulig å bryte ut av loop i en gitt tilstand. Det er viktigere for nestede sløyfer ettersom jo høyere sløyfene er, desto mer ressursforbruk og ineffektivitet.
Her vil følgende for loop slutte å kjøre så snart den når tilstanden.
for ((i = 1; i<=100;i++)); doekko $ i
hvis [$ i -eq 10]; deretter
gå i stykker
fi
ferdig
Sjekk ut hvordan du kan bryte mens du har en detaljert forklaring og demonstrasjon av loopbryter.
Siste tanker
En nestet løkke er et enkelt og kraftig konsept å forstå og implementere. Forhåpentligvis klarte denne guiden å beskrive og demonstrere konseptet.
Interessert i flere bash-skriptveiledninger? Ta en titt på følgende guider.
Glad databehandling!