logo

Bash-scripting – For Loop

Omdat BASH een opdrachtregeltaal is, krijgen we een behoorlijk rijke ervaring om de programmeervaardigheden te gebruiken om taken in de terminal uit te voeren. We kunnen lussen en voorwaardelijke instructies in BASH-scripts gebruiken om enkele repetitieve en lastige problemen op een eenvoudige programmatische manier uit te voeren. In dit artikel gaan we ons concentreren op de for loop in BASH-scripts.

Afhankelijk van de gebruikssituatie en het probleem dat het probeert te automatiseren, zijn er een aantal manieren om lussen te gebruiken.

  • Eenvoudige For-lus
  • Op bereik gebaseerd for-lus
  • Array-iteratie voor lussen
  • C-stijl voor lussen
  • Oneindig voor lus

Eenvoudige For-lus

Om een ​​for-lus uit te voeren, kunnen we de volgende syntaxis schrijven:



#!/bin/bash  for n in a b c; do  echo $n done>
  • In de eerste iteratie,n>neemt de waarde a aan, en het script drukt a af.
  • In de tweede iteratie,n>neemt de waarde b aan, en het script drukt b af.
  • In de derde iteratie,n>neemt de waarde c aan, en het script drukt c af.

501

De bovenstaande opdracht herhaalt de opgegeven elementen na de in trefwoord één voor één. De elementen kunnen getallen, tekenreeksen of andere vormen van gegevens zijn.

Op bereik gebaseerd for-lus

We kunnen op bereik gebaseerde for-lussen gebruiken. In dit type lus kunnen we het nummer opgeven dat moet worden gestart, gestopt en verhoogd bij elke iteratie (optioneel) in de instructie. Er zijn twee manieren waarop u dit kunt doen, namelijk door de waarde voor verhogen/verlagen te vermelden en door standaard met één te verhogen. De syntaxis ziet er als volgt uit:

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

500

In de bovenstaande code gebruiken we de {} om een ​​reeks getallen op te geven. Binnen de accolades specificeren we het startpunt, gevolgd door twee punten en een eindpunt. Standaard wordt dit met één verhoogd. Daarom drukken we 5 cijfers af, van 1 tot en met 5, beide inclusief.

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

502

Hier kunnen we zien dat de lus met 2 eenheden wordt verhoogd, zoals vermeld tussen de accolades. Dit maakt het werken met cijfers dus heel gemakkelijk en handig. Dit kan ook worden gebruikt met alfabetische tekens.

OPMERKING: We kunnen geen variabelen binnen de accolades gebruiken, dus we zullen de waarden hard moeten coderen. Om de variabelen te gebruiken, zien we in de volgende paragrafen de traditionele C-stijl for-lussen.

Array-iteratie voor lussen

We kunnen arrays gemakkelijk herhalen in bash met behulp van for-lussen met een specifieke syntaxis. We kunnen de speciale variabelen in BASH, d.w.z. @, gebruiken om toegang te krijgen tot alle elementen in de array. Laten we naar de code kijken:

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

503

We kunnen de array-elementen herhalen met behulp van de @-operator die alle elementen in de array ophaalt. Met behulp van de for-lus herhalen we ze één voor één. We gebruiken de variabele ${variabele_naam[@]} waarin de accolades hier de waarde van de variabele s uitbreiden, wat een array van strings is. Met behulp van de operator [@] hebben we toegang tot alle elementen en herhalen we ze dus in de for-lus. Hier de N is de iterator, dus we kunnen de waarde afdrukken of de vereiste verwerking erop uitvoeren.

C-stijl voor lussen

Zoals eerder gezegd, moeten we de variabelen in de for-lussen gebruiken om over een reeks elementen te itereren. En dus spelen de C-stijl for-loops een zeer belangrijke rol. Laten we eens kijken hoe we ze gebruiken.

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

504

Zoals we kunnen zien, kunnen we de waarde van het bereik van eindvoorwaarden dynamisch gebruiken. Houd er rekening mee dat de spaties tussen de dubbele accolades opzettelijk kunnen zijn en deel uitmaken van de syntaxis. For-lussen in C-stijl zijn de lussen die uit drie delen bestaan: de initialiserende iterator, de incrementor/decrementer en de eindvoorwaarde.

In de bovenstaande syntaxis hebben we de lus-iterator/teller geïnitialiseerd op 1, wat van alles kan zijn, afhankelijk van uw keuze. Het tweede deel is de eindvoorwaarde, hier hebben we de variabele gebruikt N die vóór de for-lus wordt geïnitialiseerd en daarom gebruiken we de simple $ operator om de waarde van de variabele te verkrijgen. Ten slotte hebben we de incrementor/decrementer die de iterator/teller verandert in een waarde die van alles kan zijn, maar in het voorbeeld hebben we de unaire operator gebruikt (++) om de waarde te verhogen met één die gelijk is aan ik=ik+1 . We kunnen dus uitspraken gebruiken als ik+=2, ik–,++i, enzovoort.

Oneindig voor lus

We gebruiken dit niet vaak, maar het is soms handig om bepaalde dingen werkend te krijgen. De syntaxis is vrij eenvoudig en vergelijkbaar met de C-stijl for-loops.

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

De lus begint metn>ingesteld op 4. Het wordt verhoogdn>met 1 bij elke iteratie en drukt de waarde van afn>totn>wordt gelijk aan 9. Wanneern>bereikt 9, debreak>statement wordt uitgevoerd en de lus wordt beëindigd. Het script stopt na het afdrukken van de cijfers 4 tot en met 8.

505

Zoals we kunnen zien heeft de 'for' lus geen voorwaarden en loopt deze voor altijd door, maar we hebben een condition statement om te controleren of deze niet eeuwig doorgaat. We gebruiken de break-instructie binnen de if-instructie om uit de lus te komen en te stoppen met itereren met de iterator. We hebben de incrementor gebruikt om de variabele in de lus te verhogen, anders is de lus oneindig. Natuurlijk hebben we enige logica nodig om uit de lus te komen en daarom moeten we de voorwaardelijke instructie if gebruiken.