FOR-lussen & WHILE-instructies

Introductie tot Bash-scripting

Alex Scriven

Data Scientist

Basisstructuur FOR-lus

Python:

for x in range(3):
    print(x)
0
1
2

R:

for (x in seq(3)){
    print(x)
}
[1] 1
[1] 2
[1] 3
Introductie tot Bash-scripting

FOR-lus in Bash

De basisstructuur in Bash is vergelijkbaar:

for x in 1 2 3

do echo $x done
1
2
3
Introductie tot Bash-scripting

FOR-lus: bereik met getallen

Bash heeft een handige manier om een numeriek bereik te maken: 'brace expansion'.

  • {START..STOP..INCREMENT}
for x in {1..5..2}

do echo $x done
1
3
5
Introductie tot Bash-scripting

FOR-lus: drie-expressie-syntaxis

Een andere veelgebruikte manier om FOR-lussen te schrijven is de 'drie-expressie'-syntaxis.

  • Zet drie expressies tussen dubbele haakjes
  • Eerste deel: startevaluatie (x=2)
  • Midden: stopconditie (x<=4)
  • Einde: (de)increment-expressie (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Introductie tot Bash-scripting

Glob-uitbreidingen

Bash ondersteunt ook patroonuitbreiding in een for-lus met het *-symbool, zoals bestanden in een map.

Stel dat er twee tekstdocumenten in de map /books staan:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Introductie tot Bash-scripting

Shell-in-een-shell herzien

Weet je nog een shell-in-een-shell maken met $()?

Je kunt dit inline aanroepen voor een for-lus!

Stel een mapstructuur zoals hieronder:

Structuur van de map books

Introductie tot Bash-scripting

Shell-in-een-shell naar FOR-lus

We kunnen loopen over het resultaat van een shell-in-een-shell-aanroep:

for book in $(ls books/ | grep -i 'air')

do echo $book done
AirportBook.txt
FairMarketBook.txt
Introductie tot Bash-scripting

WHILE-syntaxis

Vergelijkbaar met een FOR-lus, maar je stelt een conditie in die elke iteratie wordt getest.

Iteraties gaan door tot deze niet meer waar is!

  • Gebruik while in plaats van for
  • Zet de conditie tussen vierkante haken
    • Zelfde vlaggen als bij IF voor numerieke vergelijking (zoals -le)
  • Meerdere condities kun je koppelen of dubbele haken gebruiken, net als bij IF, met && (EN) of || (OF)
  • Zorg voor een wijziging in de code die stopt triggert (anders krijg je een oneindige lus!)
Introductie tot Bash-scripting

WHILE-voorbeeld

Een eenvoudig voorbeeld:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Introductie tot Bash-scripting

Let op de oneindige lus

Pas op voor de oneindige WHILE-lus als de stopconditie nooit wordt gehaald.

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # verhoog x niet. Het haalt nooit 3!
    # ((x+=1)) 
done

Dit print 1 voor altijd!

Introductie tot Bash-scripting

Laten we oefenen!

Introductie tot Bash-scripting

Preparing Video For Download...