Utforskning av For-løkker i Bash-skript
En For-løkke er en sentral del av ethvert programmeringsspråk, og den muliggjør repetisjon gjennom en spesifisert mengde elementer. Dette er spesielt nyttig når du ønsker å behandle en liste eller et sett med «n» elementer. La oss se på et enkelt eksempel:
1Fiolett2Indigo3Blå4Grønt Regnbuebord
For å utføre operasjoner eller gjenta elementene i tabellen over, er en For-løkke nødvendig.
Bash For-løkke: Grunnleggende
I et Bash-skript ser syntaksen for en For-løkke slik ut:
#!/bin/bash for VAR in 1 2 3 4 5.....N do HANDLING 1 HANDLING 2 ..... done
Denne strukturen er relativt enkel. Den første linjen, #!/bin/bash, indikerer at dette er et Bash-skript. VAR fungerer som en midlertidig variabel for iterasjonen. N representerer det maksimale antall repetisjoner. «do» og «done» markerer henholdsvis starten og slutten av løkken. Handlingene inne i løkken er kommandoene som blir utført i hver iterasjon.
Bash For-løkker kan håndtere ulike datatyper, som lister, tekster, heltall og matriser. Denne artikkelen vil demonstrere noen vanlige bruksområder for For-løkker i Bash.
Du kan kjøre disse eksemplene direkte i Bash-kommandolinjen eller lagre dem i en fil med filtypen .sh, og kjøre den med kommandoen «bash filnavn.sh».
Behandling av statisk liste
La oss si vi har en liste med regnbuefarger: rainbowColorList = Fiolett, Indigo, Blå, Grønn, Gul, Oransje, Rød.
Vi kan skrive ut denne listen ved hjelp av en Bash For-løkke:
#!/bin/sh # Definerer listen rainbowColorList=Fiolett,Indigo,Blå,Grønn,Gul,Oransje,Rød # Bruker komma som skilletegn for farge in ${rainbowColorList//,/ } do echo $farge done
Resultatet vil være en liste over farger, hver på sin egen linje.
#Utdata Fiolett Indigo Blå Grønn Gul Oransje Rød
Behandling av en matrise
Syntaksen for å deklarere en matrise er noe annerledes. Hvert element (tekst) plasseres i parenteser.
rainbowArray=("Fiolett" "Indigo" "Blå" "Grønn" "Gul" "Oransje" "Rød") for farge in "${rainbowArray[@]}"; do echo "Jeg liker $farge" done
Symbolet «@» brukes for å iterere gjennom hvert element i matrisen.
#Utdata Jeg liker Fiolett Jeg liker Indigo Jeg liker Blå Jeg liker Grønn Jeg liker Gul Jeg liker Oransje Jeg liker Rød
Vi kan også bruke For-løkker for å skrive ut indeksene sammen med elementene i matrisen.
#Utskrift med indeks rainbowArray=("Fiolett" "Indigo" "Blå" "Grønn" "Gul" "Oransje" "Rød") for i in "${!rainbowArray[@]}"; do echo "Farge på indeks " $i " : " "${rainbowArray[$i]}" i=$((i+1)); done
#Utdata Farge på indeks 0 : Fiolett Farge på indeks 1 : Indigo Farge på indeks 2 : Blå Farge på indeks 3 : Grønn Farge på indeks 4 : Gul Farge på indeks 5 : Oransje Farge på indeks 6 : Rød
Merk at vi bruker «!» for å hente elementets indeks i løkken.
Iterasjon over tallrekker
En Bash For-løkke kan også iterere over en sekvens av tall.
#Iterasjon over en tallrekke echo "Nedtelling starter..." for N in {10..0} do echo "$N" done
«..» indikerer et intervall av tall.
#Utdata 10 9 8 7 6 5 4 3 2 1 0
Vi kan også hoppe over tall i tellingen ved å spesifisere et steg.
I eksemplet under hopper vi over 3 tall av gangen:
#Iterasjon med hopp echo "Nedtelling starter..." for N in {30..0..3} do echo "$N" done
Programmet starter med 30 og teller ned til 0. Den siste parameteren, «3», i For-løkken angir hvor mange tall som skal hoppes over.
#Utdata 30 27 24 21 18 15 12 9 6 3 0
Tekster og tegn
Bash For-løkker kan brukes til mange interessante tekstoprasjoner.
For eksempel kan vi lese hvert tegn i en tekst ved å bruke «seq»-operatoren i en For-løkke:
#Leser tegn i en tekst myword="velkommen" for i in $(seq 1 ${#myword}) do echo "${myword:i-1:1}" done
Merk at «seq» må starte med 1 for å få det første tegnet først.
#Utdata v e l k o m m e n
Vi kan også skrive ut hvert ord i en setning, adskilt med mellomrom, én etter én:
#Leser hvert ord i en setning mysetning="Velkommen til tipsbilk.net. Et samlingspunkt for alle techies" for ord in $mysetning; do echo $ord done
#Utdata Velkommen til tipsbilk.net. Et samlingspunkt for alle techies
Uttrykk
Akkurat som i andre programmeringsspråk, som Java, kan vi bruke uttrykk inne i en Bash For-løkke.
for (( var=10; var>=0; var-- )) do echo "Teller ned...$var" done
#Utdata Teller ned...10 Teller ned...9 Teller ned...8 Teller ned...7 Teller ned...6 Teller ned...5 Teller ned...4 Teller ned...3 Teller ned...2 Teller ned...1 Teller ned...0
Håndtering av kommandolinjeargumenter
For å lese argumenter fra kommandolinjen bruker vi «read»-kommandoen. I eksemplet nedenfor henter vi inn tall fra brukeren og regner ut summen ved hjelp av en Bash For-løkke. Variabelen «total» brukes for å lagre mellom- og sluttsummen.
read -a array -p "Skriv inn tallene du ønsker å legge sammen:" total=0 for i in ${array[@]}; do let total+=$i done echo "Summen av tallene er: $total"
Resultatet er:
#Utdata Skriv inn tallene du ønsker å legge sammen: 3 4 66 Summen av tallene er: 73
Finne oddetall og partall
For å finne oddetall og partall mellom 1 og 10 (eller et annet tall N), må vi bruke en if-betingelse sammen med Bash For-løkken. For å identifisere partall, deler vi tallet på 2. Hvis resten er 0, er det et partall; ellers er det et oddetall.
#Deklarerer lister for partall og oddetall evennum="" oddnum="" for (( i=1; i<=10; i++ )) do remainder=$(( $i % 2 )) if [ $remainder -eq 0 ]; then evennum="$evennum $i " else oddnum="$oddnum $i " fi done echo "Partall er: "$evennum echo "Oddetall er: "$oddnum
I eksemplet er området satt til 10. Vi kan endre dette tallet for å sjekke tall i andre områder. Du kan også prøve å lese tallet fra brukeren ved hjelp av «read»-kommandoen, som vi lærte i forrige avsnitt.
#Utdata Partall er: 2 4 6 8 10 Oddetall er: 1 3 5 7 9
Uendelig løkke
En uendelig løkke er en løkke som fortsetter å kjøre uten å stoppe, og programmet må tvinges til å avslutte med Ctrl+C. Vi kan enkelt lage en uendelig løkke ved å bruke «; ;» operatøren inne i For-løkken:
for (( ; ; )) do echo "Velkommen til tipsbilk.net" done
#Utdata Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net Velkommen til tipsbilk.net ^C $
Break-erklæring
En «break»-erklæring brukes for å avslutte løkken når en «if»-betingelse er oppfylt.
for farge in Fiolett Indigo Blå Grønn Gul Oransje Rød do if [[ "$farge" == 'Grønn' ]]; then break fi echo "Søker etter Grønn, fargen nå er $farge" done echo "Jeg fant fargen min $farge"
I dette eksemplet prøver vi å finne fargen «Grønn». For-løkken går gjennom hver farge, og når «Grønn» er funnet, avsluttes løkken takket være «break»-erklæringen.
#Utdata Søker etter Grønn, fargen nå er Fiolett Søker etter Grønn, fargen nå er Indigo Søker etter Grønn, fargen nå er Blå Jeg fant fargen min Grønn
Continue-erklæring
«Continue» brukes for å hoppe over gjeldende iterasjon og fortsette til den neste basert på en bestemt betingelse. For eksempel, hvis du ikke vil skrive ut fargen «Grønn» fra det forrige programmet, kan vi bruke «continue». Alle andre farger bortsett fra «Grønn» vil da vises.
for farge in Fiolett Indigo Blå Grønn Gul Oransje Rød do if [[ "$farge" == 'Grønn' ]]; then continue fi echo "$farge" done
#Utdata Fiolett Indigo Blå Gul Oransje Rød
Avsluttende ord
Vi har nå sett på de vanligste bruksområdene for Bash For-løkker, inkludert bruk av tekster, tall, matriser og lister. Hvis du lærer deg Linux, men har en Windows 10-maskin, kan du bruke WSL-funksjonen og installere Linux på din Windows-maskin.
Deretter kan du bruke Linux-terminalen på samme måte som CMD.
Du kan også sjekke ut hvordan du kjører Bash-skript med Python.