logo

Bash Scripting – för loop

Eftersom BASH är ett kommandoradsspråk får vi en ganska funktionsrik erfarenhet för att utnyttja programmeringsfärdigheterna för att utföra uppgifter i terminalen. Vi kan använda loopar och villkorliga uttalanden i BASH-skript för att utföra några repetitiva och knepiga problem på ett enkelt programmatiskt sätt. I den här artikeln kommer vi att fokusera på för slinga i BASH-skript.

Beroende på användningsfallet och problemet som den försöker automatisera, finns det ett par sätt att använda loopar.



  • Enkel för loop
  • Räckviddsbaserad för loop
  • Array-iteration för loopar
  • C-stil för öglor
  • Oändlig för loop

Enkel för loop

För att köra en for-loop kan vi skriva följande syntax:

#!/bin/bash  for n in a b c; do  echo $n done>
  • I den första iterationen,n>tar värdet a och skriptet skriver ut a.
  • I den andra iterationen,n>tar värdet b, och skriptet skriver ut b.
  • I den tredje iterationen,n>tar värdet c, och skriptet skriver ut c.

501

Ovanstående kommando kommer att iterera över de angivna elementen efter i nyckelord ett efter ett. Elementen kan vara siffror, strängar eller andra former av data.



Räckviddsbaserad för loop

Vi kan använda räckviddsbaserade för loopar. I den här typen av loop kan vi ange numret som ska starta, stoppa och öka vid varje iteration (valfritt) i satsen. Det finns två sätt du kan göra detta, t.ex. genom att nämna inkrementerings-/minskningsvärdet och genom att öka med ett som standard. Syntaxen ser ut så här:

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

500

I koden ovan använder vi {} för att ange ett antal nummer. Inuti de lockiga hängslen anger vi startpunkten följt av två punkter och en slutpunkt. Som standard ökar den med ett. Därför skriver vi ut 5 nummer från 1 till 5 båda.



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

502

Här kan vi se att slingan ökade med 2 enheter som nämnts i de lockiga hängslen. Detta gör det därför mycket enkelt och bekvämt att arbeta med siffror. Detta kan också användas med alfabetiska tecken.

NOTERA: Vi kan inte använda variabler inuti de lockiga klammerparenteserna, så vi måste hårdkoda värdena. För att använda variablerna ser vi den traditionella C-stilen för loopar i de kommande avsnitten.

Array-iteration för loopar

Vi kan iterera över arrayer bekvämt i bash med för loopar med en specifik syntax. Vi kan använda specialvariablerna i BASH, dvs @ för att komma åt alla element i arrayen. Låt oss titta på koden:

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

503

Vi kan iterera över arrayelementen med @-operatorn som får alla element i arrayen. Med hjälp av for-slingan itererar vi över dem en efter en. Vi använder variabeln ${variable_name[@]} där de krulliga klammerparenteserna här utökar värdet på variabeln s här som är en array av strängar. Med operatorn [@] kommer vi åt alla element och itererar på så sätt över dem i for en loop. Här, den n är iteratorn och därför kan vi skriva ut värdet eller göra den nödvändiga bearbetningen på det.

C-stil för öglor

Som sagt tidigare måste vi använda variablerna inuti for-slingorna för att iterera över ett antal element. Och därmed spelar den C-stilade för loopar en mycket viktig roll. Låt oss se hur vi använder dem.

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

504

Som vi kan se kan vi dynamiskt använda värdet av intervallet för slutvillkor. Kom ihåg att mellanrummen mellan de dubbla klammerparenteserna kan vara avsiktliga och är en del av syntaxen. C-stilade för loopar är looparna som har 3 delar, den initialiserande iteratorn, inkrementorn/decrementern och slutvillkoret.

I syntaxen ovan har vi initierat loop-iteratorn/räknaren till 1 som kan vara vad som helst enligt val. Den andra delen är slutvillkoret, här har vi använt variabeln n som initieras före for-slingan och därför använder vi det enkla $ operatorn för att få värdet på variabeln. Slutligen har vi inkrementorn/decrementern som ändrar iteratorn/räknaren till ett värde som kan vara vad som helst, men i exemplet har vi använt unäroperatorn (++) att öka värdet med ett som motsvarar i=i+1 . Därför kan vi använda uttalanden som i+=2, i–,++i, och så vidare.

Oändlig för loop

Vi använder det inte ofta men det är ibland användbart för att få vissa saker att fungera. Syntaxen är ganska enkel och liknar den C-stilade för loopar.

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

Slingan börjar medn>inställd på 4. Den ökarn>med 1 vid varje iteration och skriver ut värdet pån>fram tillsn>blir lika med 9. Närn>når 9, denbreak>satsen exekveras och loopen avslutas. Skriptet stoppas efter att ha skrivit ut siffrorna 4 till 8.

505

Som vi kan se har 'för'-slingan inga villkor och denna loopar för alltid men vi har en villkorssats för att kontrollera att den inte fortsätter för alltid. Vi använder break-satsen inuti if-satsen för att komma ur loopen och sluta iterera med iteratorn. Vi har använt inkrementorn för att öka variabeln i slingan annars är slingan oändlig. Naturligtvis behöver vi lite logik för att bryta oss ur loopen och det är därför vi måste använda if conditional-satsen.