En for-loop är en grundläggande komponent i alla programmeringsspråk. Den ger program möjligheten att repetera en serie åtgärder ett bestämt antal gånger.
Om du till exempel behöver gå igenom en lista eller en array som innehåller ett visst antal element, är en for-loop verktyget du behöver. Tänk dig följande exempel:
1Violett2Indigo3Blå4Grön Regnbågstabell
För att hantera eller upprepa objekten i ovanstående tabell, krävs en for-loop.
Bash For-Loop
I ett bash-skript ser syntaxen för en for-loop ut så här:
#!/bin/bash for VAR in 1 2 3 4 5.....N do HANDLING 1 HANDLING 2 ..... done
En bash for-loop är relativt enkel att förstå. Första raden, #!/bin/bash, indikerar att koden är ett bash-skript. VAR är en temporär variabel som används i loopen. N står för det maximala antalet iterationer. ’do’ och ’done’ markerar början respektive slutet av loopen. ’HANDLING’ representerar de kommandon som ska utföras inuti loopen.
Vi kan använda bash for-loop med olika typer av variabler, såsom listor, strängar, heltal och arrayer. I denna artikel utforskar vi några vanliga användningsområden för bash for-loop.
Dessa program kan köras direkt i bash-kommandotolken, eller sparas i en fil och köras med kommandot ’bash filename.sh’.
Läsa en statisk lista
Låt oss säga att vi har följande lista: rainbowColorList = Violett, Indigo, Blå, Grön, Gul, Orange, Röd.
Vi kan enkelt skriva ut den här stränglistan med en bash for-loop enligt nedan:
#! /bin/sh # Definiera listan rainbowColorList=Violett,Indigo,Blå,Grön,Gul,Orange,Röd # Kommatecken som avgränsare med //,/ for colors in ${rainbowColorList//,/ } do echo $colors done
Utskriften blir en lista med elementen på separata rader.
#Utskrift Violett Indigo Blå Grön Gul Orange Röd
Läsa en array
Syntaxen för att deklarera en array skiljer sig lite. Här använder vi parenteser för varje element (sträng).
rainbowArray=("Violett" "Indigo" "Blå" "Grön" "Gul" "Orange" "Röd") for colors in "${rainbowArray[@]}"; do echo "Jag gillar $colors" done
’@’ används för att gå igenom varje element i arrayen.
#Utskrift Jag gillar Violett Jag gillar Indigo Jag gillar Blå Jag gillar Grön Jag gillar Gul Jag gillar Orange Jag gillar Röd
Vi kan även använda for-loop för att skriva ut indexen och arrayelementen.
#Utskrift med index rainbowArray=("Violett" "Indigo" "Blå" "Grön" "Gul" "Orange" "Röd") for i in "${!rainbowArray[@]}"; do echo "Färgen vid index " $i " : " "${rainbowArray[$i]}" i=$((i+1)); done
#Utskrift Färgen vid index 0 : Violett Färgen vid index 1 : Indigo Färgen vid index 2 : Blå Färgen vid index 3 : Grön Färgen vid index 4 : Gul Färgen vid index 5 : Orange Färgen vid index 6 : Röd
Notera att vi använder ’!’ inuti loopen för att hämta elementens index.
Iterera genom en serie siffror
Vi kan använda bash for-loop för att iterera över en sekvens av siffror.
#Iterera genom en serie siffror echo "Nedräkningen börjar..." for N in {10..0} do echo "$N" done
’..’ indikerar en sekvens av siffror.
#Utskrift 10 9 8 7 6 5 4 3 2 1 0
Vi kan också hoppa över vissa räknetal genom att ange intervallet.
I exemplet nedan hoppar vi över räkning med 3.
#Iterera med hoppräkning echo "Nedräkningen börjar..." for N in {30..0..3} do echo "$N" done
Programmet ovan startar med 30 som första siffran och räknar ner till 0. Den sista parametern i for-loopen, ’3’, bestämmer antalet steg som ska hoppas över.
#Utskrift 30 27 24 21 18 15 12 9 6 3 0
Strängar och tecken
Vi kan utföra många intressanta strängoperationer med bash for-loop.
Till exempel kan vi läsa varje tecken i en sträng genom att använda operatorn ”seq” inuti en for-loop:
#Läsa tecken i en sträng myword="välkommen" for i in $(seq 1 ${#myword}) do echo "${myword:i-1:1}" done
Notera att ”seq” måste börja med 1 för att hämta det första tecknet först.
#Utskrift v ä l k o m m e n
Vi kan också skriva ut strängar separerade med mellanslag, ett ord i taget:
#Läsa varje ord i en mening mysentence="Välkommen till adminvista.com. En central plats för alla tekniknördar" for word in $mysentence; do echo $word done
#Utskrift Välkommen till adminvista.com. En central plats för alla tekniknördar
Uttryck
Precis som i andra programmeringsspråk som Java, kan vi inkludera uttryck i en bash for-loop.
for (( var=10; var>=0; var-- )) do echo "Räknar ner...$var" done
#Utskrift Räknar ner...10 Räknar ner...9 Räknar ner...8 Räknar ner...7 Räknar ner...6 Räknar ner...5 Räknar ner...4 Räknar ner...3 Räknar ner...2 Räknar ner...1 Räknar ner...0
Läsa argument från kommandoraden
För att läsa från kommandoradsargument använder vi kommandot ’read’. I exemplet nedan hämtar vi några siffror från användaren och skriver ut summan med hjälp av en bash for-loop. Vi använder variabeln ’total’ för att lagra den ackumulerade summan.
read -a array -p "Ange de tal du vill addera:" total=0 for i in ${array[@]}; do let total+=$i done echo "Summan av talen är: $total"
Utskriften blir:
#Utskrift Ange de tal du vill addera: 3 4 66 Summan av talen är: 73
Hitta udda och jämna tal
För att identifiera udda och jämna tal mellan 1 och 10 (eller vilket annat tal N som helst), använder vi en if-sats i kombination med en bash for-loop. För att avgöra om ett tal är jämnt, delar vi talet med 2 och om resten är 0, klassificerar vi det som ett jämnt tal, annars är det ett udda tal.
#Deklarera listorna där jämna och udda tal kommer att sorteras och lagras 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 "Jämna tal är: "$evennum echo "Udda tal är: "$oddnum
Notera att vi har angett intervallet som 10 i ovanstående exempel. Du kan ändra detta tal för att få jämna och udda tal inom vilket intervall som helst. Du kan även försöka läsa in numret från användaren med hjälp av kommandot ”read” som vi lärde oss i föregående avsnitt.
#Utskrift Jämna tal är: 2 4 6 8 10 Udda tal är: 1 3 5 7 9
Oändlig loop
En oändlig loop är en loop som aldrig slutar köras och programmet måste avbrytas manuellt med Ctrl+C. Vi kan enkelt skapa en oändlig loop med hjälp av ’;;’ operatorn inuti en for-loop:
for (( ; ; )) do echo "Välkommen till adminvista.com" done
#Utskrift Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com Välkommen till adminvista.com ^C $
Break-sats
Break-satser används för att avbryta loopen när ett ”om”-villkor uppfylls.
for color in Violett Indigo Blå Grön Gul Orange Röd do if [[ "$color" == 'Grön' ]]; then break fi echo "Söker efter Grön, färgen är nu $color" done echo "Jag hittade min färg $color"
I detta exempel försöker vi hitta färgen grön. For-loopen går igenom varje färg, och när den gröna färgen hittas, avbryts loopen på grund av break-satsen.
#Utskrift Söker efter Grön, färgen är nu Violett Söker efter Grön, färgen är nu Indigo Söker efter Grön, färgen är nu Blå Jag hittade min färg Grön
Continue-sats
Continue används för att hoppa över den aktuella iterationen av loopen och gå vidare till nästa baserat på ett visst villkor. Till exempel, om du inte vill skriva ut färgen ”Grön” från vårt tidigare program, kan vi lägga till continue, och alla andra färger utom Grön kommer att visas.
for color in Violett Indigo Blå Grön Gul Orange Röd do if [[ "$color" == 'Grön' ]]; then continue fi echo "$color" done
#Utskrift Violett Indigo Blå Gul Orange Röd
Slutord
Vi har täckt de vanligaste sätten att använda en bash for-loop, inklusive strängar, heltal, arrayer och listor. Om du lär dig Linux men använder en Windows 10-dator kan du använda WSL-funktionen och installera Linux på din Windows-maskin.
Du kan sedan använda Linux-terminalen på ett sätt som liknar CMD.
Du kan även undersöka Hur man kör bash-skript med Python?