Introductie tot Bash-scripting
Alex Scriven
Data Scientist
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
De basisstructuur in Bash is vergelijkbaar:
for x in 1 2 3do echo $x done
1
2
3
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
Een andere veelgebruikte manier om FOR-lussen te schrijven is de 'drie-expressie'-syntaxis.
x=2)x<=4)x+=2)
for ((x=2;x<=4;x+=2))
do
echo $x
done
2
4
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
Weet je nog een shell-in-een-shell maken met $()?
Je kunt dit inline aanroepen voor een for-lus!
Stel een mapstructuur zoals hieronder:

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
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!
while in plaats van for-le)&& (EN) of || (OF)Een eenvoudig voorbeeld:
x=1while [ $x -le 3 ];do echo $x ((x+=1)) done
1
2
3
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