I programmering eller skripting er sløyfen et av de mest grunnleggende og kraftige konseptene. En sløyfe utfører visse oppgaver til de spesifiserte forholdene er oppfylt. Hvert programmerings- eller skriptspråk har forskjellige måter å implementere konseptet.
I denne guiden, sjekk ut den nestede sløyfen i bash scripting.
Nestet sløyfe
En sløyfe utfører per definisjon visse oppgaver til forholdene er oppfylt. Hva om oppgaven inkluderer å kjøre en loop? Dette er konseptet med en nestet sløyfe. En sløyfe i en sløyfe.
Dette er den grunnleggende strukturen til en sløyfe.
mens (tilstand)
# noe
Her vil mens Loop fortsetter å utføre oppgavene som er erklært inne i blokken så lenge tilstanden er oppfylt. I tilfelle av en nestet mens du er sløyfe, vil strukturen se slik ut.
# Hovedsløyfe
mens (tilstand)
# Nestet sløyfe
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 -skript
Bash er et kraftig skriptspråk. Det er forskjellige sløyfestrukturer i bash. De mest populære er for, mens og inntil løkker. Hvis du er kjent med C/C ++ programmering før, vil syntaksen definitivt se ganske lik.
For løkker
For sløyfe er en av de vanligste og allsidige formene output osv. Strukturen til løkker i bash -skripting. Strukturen ligner også for loop i C/C ++ mye.
Strukturen til for loop i bash er som følger.
for ((initialiser; tilstand; økning)); gjøre
# noe
Ferdig
Strukturen er veldig selvforklarende. Initialiseringsseksjonen er ikke obligatorisk. Tilstanden og økningen er imidlertid høyere prioritet.
La oss sette det ut i handling. Her er et veldig forenklet bashskript som implementerer for loop.
for ((i = 0; i < 5 ; i++)); do
ekko "Hello World"
Ferdig
Det er også mulig å bruke liste/rekkevidde som sløyfetilstand. Det er spesielt nyttig hvis du jobber med en liste over filer, nummerområder, matriser, kommandoutganger osv. Strukturen ser ut som dette.
for vare i; gjøre
# noe
Ferdig
Følgende skript vil for eksempel skrive ut “Hello World” fem ganger.
for jeg i 1… 5; gjøre
ekko "Hello World"
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 katalog.
for i in/usr/bin/*; gjøre
ekko $ i
Ferdig
Nå, hva gjør vi for å ha en nestet for sløyfe? Det er bare en for sløyfe inne i en annen. Her er en nestet for sløyfe ved hjelp av forrige eksempel.
for ((i = 0; i < 3 ; i++)); do
for ((j = 0; j < 2 ; j++)); do
ekko "Hello World"
Ferdig
Ferdig
Produksjonen vil være "Hello World" 6 ganger. Den ytre sløyfen vil løpe 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 -skripting. Syntaksen ser slik ut.
samtidig som; gjøre
# noe
Ferdig
I det følgende eksemplet vil manuset skrive ut “Hello World” fem ganger.
num = 1
mens [$ num -le 5]; gjøre
ekko "Hello World"
num = $ (($ num+1))
Ferdig
Hvordan ville det se ut å ha en nestet mens du er sløyfe? Her er et enkelt eksempel.
num_a = 1
num_b = 1
mens [$ num_a -le 5]; gjøre
mens [$ num_b -LE 5]; gjøre
ekko "Hello World"
num_b = $ (($ num_b+1))
Ferdig
num_a = $ (($ num_a+1))
Ferdig
Til løkker
Hvis du har en programmeringsbakgrunn i C/C ++, er du kjent med Do-While Loop. Dessverre har Bash ikke noe sånt. Imidlertid, inntil sløyfen fungerer på lignende måte. Syntaksen ser også ganske den samme ut.
før []; gjøre
# noe
Ferdig
Forskjellen mellom stundet og til løkken er testtilstanden. Så lenge testtilstanden er sann, vil en stundsløyfe fortsette å løpe. En til sløyfe vil imidlertid fortsette å løpe bare hvis tilstanden er falsk.
Her er et raskt eksempel på mens Loop. Det skriver ut multiplikasjonstabellen på 2.
num_a = 1
til [$ num_a -GT 10]; gjøre
ekko $ (($ num_a * 2))
num_a = $ (($ num_a+1))
Ferdig
Sløyfepause
I visse situasjoner, hvis visse forhold er oppfylt, blir det overflødig å kjøre resten av sløyfen. Loop -pauser er en interessant funksjon som gjør det mulig å bryte ut av sløyfen i en gitt tilstand. Det er viktigere for nestede løkker som jo høyere løkker, jo mer ressursforbruk og ineffektivitet.
Her vil følgende for loop slutte å utføre så snart den når tilstanden.
for ((i = 1; i<=100;i++)); do
ekko $ i
hvis [$ i -eq 10]; deretter
gå i stykker
fi
Ferdig
Ta en titt på hvordan du går i stykker mens du er sløyfe for dyptgående forklaring og demonstrasjon av sløyfepauser.
Siste tanker
En nestet sløyfe er et enkelt og kraftig konsept å forstå og implementere. Forhåpentligvis var denne guiden i stand til å beskrive og demonstrere konseptet.
Interessert i flere bash -skriptguider? Sjekk ut følgende guider.
Glad databehandling!