Introduktion till Bash-skriptning
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
Grundstrukturen i Bash är liknande:
for x in 1 2 3do echo $x done
1
2
3
Bash har ett smidigt sätt att skapa talintervall med så kallad "klammerexpansion":
{START..STOP..INCREMENT}for x in {1..5..2}do echo $x done
1
3
5
Ett annat vanligt sätt att skriva FOR-loopar är syntaxen med tre uttryck.
x=2)x<=4)x+=2)
for ((x=2;x<=4;x+=2))
do
echo $x
done
2
4
Bash stöder även mönstermatchande expansioner i FOR-loopar med symbolen *, till exempel för filer i en katalog.
Anta att det finns två textfiler i mappen /books:
for book in books/*
do
echo $book
done
books/book1.txt
books/book2.txt
Kommer du ihåg hur man skapar ett skal-i-ett-skal med $()-notationen?
Du kan använda det direkt i en FOR-loop!
Anta följande mappstruktur:

Du kan loopa igenom resultatet av ett skal-i-ett-skal-anrop:
for book in $(ls books/ | grep -i 'air')do echo $book done
AirportBook.txt
FairMarketBook.txt
Liknar en FOR-loop, men du anger ett villkor som testas vid varje iteration.
Iterationerna fortsätter tills villkoret inte längre är uppfyllt!
while i stället för for-le)&& (AND) eller || (OR)Här är ett enkelt exempel:
x=1while [ $x -le 3 ];do echo $x ((x+=1)) done
1
2
3
Akta dig för den oändliga WHILE-loopen, om avbrottsvillkoret aldrig uppfylls.
x=1
while [ $x -le 3 ];
do
echo $x
# don't increment x. It never reaches 3!
# ((x+=1))
done
Detta skriver ut 1 i all oändlighet!
Introduktion till Bash-skriptning