Nestet sløyfe i eksempler på bashskript

Nestet sløyfe i eksempler på bashskript

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.

  • Bash uendelig sløyfe
  • Bash Script User Input
  • Bash -funksjon returnerende matrise

Glad databehandling!