Bash Scripting – For Loop

Bash Scripting – For Loop

Siden BASH er et kommandolinjespråk, får vi en ganske funksjonsrik erfaring for å utnytte programmeringsferdighetene til å utføre oppgaver i terminalen. Vi kan bruke looper og betingede utsagn i BASH-skript for å utføre noen repeterende og vanskelige problemer på en enkel programmatisk måte. I denne artikkelen skal vi fokusere på for løkke i BASH-skript.

Avhengig av brukstilfellet og problemet den prøver å automatisere, er det et par måter å bruke loops på.

  • Enkel for loop
  • Rekkeviddebasert for loop
  • Array-iterasjon for løkker
  • C-stil for løkker
  • Uendelig for loop

Enkel for loop

For å utføre en for-løkke kan vi skrive følgende syntaks:

#!/bin/bash  for n in a b c; do  echo $n done 
  • I den første iterasjonen, n> tar verdien a, og skriptet skriver ut a.
  • I den andre iterasjonen, n> tar verdien b, og skriptet skriver ut b.
  • I den tredje iterasjonen, n> tar verdien c, og skriptet skriver ut c.

501

Kommandoen ovenfor vil iterere over de angitte elementene etter i nøkkelord ett etter ett. Elementene kan være tall, strenger eller andre former for data.

Rekkeviddebasert for loop

Vi kan bruke rekkeviddebasert for løkker. I denne typen loop kan vi spesifisere tallet som skal starte, stoppe og øke ved hver iterasjon (valgfritt) i setningen. Det er to måter du kan gjøre dette på, dvs. ved å nevne øknings-/dekrementeringsverdien og ved å øke med én som standard. Syntaksen ser slik ut:

#!/bin/bash  for n in {1..5};  do  echo $n done 

500

I koden ovenfor bruker vi {} for å spesifisere et tallområde. Inne i de krøllete klammeparentesene spesifiserer vi startpunktet etterfulgt av to prikker og et endepunkt. Som standard øker den med én. Derfor skriver vi ut 5 tall fra 1 til 5 begge inkludert.

#!/bin/bash  for n in {1..5..2};  do  echo $n done 

502

Her kan vi se at løkken økte med 2 enheter som nevnt i krøllete seler. Dermed gjør dette arbeidet med tall veldig enkelt og praktisk. Dette kan også brukes med alfabetiske tegn.

MERK: Vi kan ikke bruke variabler inne i de krøllede klammeparentesene, så vi må hardkode verdiene. For å bruke variablene ser vi den tradisjonelle C-stilen for loops i de neste avsnittene.

Array-iterasjon for løkker

Vi kan enkelt iterere over arrays i bash ved å bruke for looper med en spesifikk syntaks. Vi kan bruke spesialvariablene i BASH, dvs. @ for å få tilgang til alle elementene i matrisen. La oss se på koden:

#!/bin/bash  s=('football' 'cricket' 'hockey')  for n in ${s[@]};  do  echo $n done 

503

Vi kan iterere over array-elementene ved å bruke @-operatoren som henter alle elementene i arrayen. Ved å bruke for-løkken itererer vi over dem én etter én. Vi bruker variabelen ${variable_name[@]} hvor de krøllete klammeparentesene her utvider verdien av variabelen s her, som er en rekke strenger. Ved å bruke [@]-operatoren får vi tilgang til alle elementene og itererer dermed over dem i for en loop. Her, den n er iteratoren, derfor kan vi skrive ut verdien eller utføre den nødvendige behandlingen på den.

C-stil for løkker

Som sagt tidligere, må vi bruke variablene inne i for-løkkene for å iterere over en rekke elementer. Og dermed spiller den C-stilte for loops en veldig viktig rolle. La oss se hvordan vi bruker dem.

#!/bin/bash  n=7 for (( i=1 ; i <=$n ; i++ ));  do  echo $i done 

504

Som vi kan se, kan vi dynamisk bruke verdien av rekkevidden av sluttbetingelser. Husk at mellomrommene mellom de doble klammeparentesene kan være tilsiktet og er en del av syntaksen. C-stilt for løkker er løkkene som har 3 deler, initialiserende iterator, inkrementor/decrementer og sluttbetingelsen.

I syntaksen ovenfor har vi initialisert loop-iteratoren/telleren til 1 som kan være hva som helst etter valg. Den andre delen er sluttbetingelsen, her har vi brukt variabelen n som initialiseres før for-løkken og dermed bruker vi det enkle $ operatør for å få verdien av variabelen. Til slutt har vi inkrementoren/dekrementeren som endrer iteratoren/telleren til en verdi som kan være alt, men i eksemplet har vi brukt unæroperatoren (++) å øke verdien med en som tilsvarer i=i+1 . Dermed kan vi bruke utsagn som i+=2, i–,++i, og så videre.

Uendelig for loop

Vi bruker ikke dette ofte, men det er noen ganger nyttig å få visse ting til å fungere. Syntaksen er ganske enkel og ligner på C-stilen for loops.

#!/bin/bash  n=4 for (( ; ; ));  do  if [ $n -eq 9 ];then  break  fi  echo $n  ((n=n+1)) done 

Løkken starter med n> satt til 4. Den øker n> med 1 ved hver iterasjon og skriver ut verdien av n> før n> blir lik 9. Når n> når 9, den break> setningen utføres, og loopen avsluttes. Skriptet stopper etter å ha skrevet ut tallene 4 til 8.

505

Som vi kan se har 'for'-løkken ingen betingelser og denne går for alltid, men vi har en tilstandserklæring for å sjekke at den ikke fortsetter for alltid. Vi bruker break-setningen inne i if-setningen for å komme ut av loopen og slutte å iterere med iteratoren. Vi har brukt inkrementoren til å øke variabelen i løkken ellers er løkken uendelig. Selvfølgelig trenger vi litt logikk for å bryte ut av loopen, og det er derfor vi trenger å bruke if condition-setningen.