Smyčky FOR & příkazy WHILE

Úvod do Bash skriptování

Alex Scriven

Data Scientist

Základní struktura smyčky FOR

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
Úvod do Bash skriptování

Smyčka FOR v Bash

Základní struktura v Bash je podobná:

for x in 1 2 3

do echo $x done
1
2
3
Úvod do Bash skriptování

Číselné rozsahy ve smyčce FOR

Bash nabízí elegantní způsob vytvoření číselného rozsahu zvaný 'rozvinutí složených závorek':

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

do echo $x done
1
3
5
Úvod do Bash skriptování

Syntaxe tří výrazů ve smyčce FOR

Dalším běžným zápisem smyček FOR je syntaxe 'tří výrazů'.

  • Tři výrazy uzavřete do dvojitých závorek
  • První část je počáteční výraz (x=2)
  • Prostřední část je podmínka ukončení (x<=4)
  • Poslední část je výraz pro inkrementaci (nebo dekrementaci) (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Úvod do Bash skriptování

Rozvinutí glob vzorů

Bash umožňuje rozvinutí vzorů do smyčky for pomocí symbolu *, například pro soubory v adresáři.

Předpokládejme, že ve složce /books jsou dva textové soubory:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Úvod do Bash skriptování

Shell v shellu znovu

Pamatujete si vytváření shellu v shellu pomocí notace $()?

Lze jej použít přímo ve smyčce for!

Předpokládejme následující strukturu složek:

Struktura adresáře books

Úvod do Bash skriptování

Shell v shellu ve smyčce FOR

Výsledek volání shellu v shellu lze procházet smyčkou:

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

do echo $book done
AirportBook.txt
FairMarketBook.txt
Úvod do Bash skriptování

Syntaxe příkazu WHILE

Podobné jako smyčka FOR. Místo výčtu se testuje podmínka při každé iteraci.

Iterace pokračují, dokud je podmínka splněna!

  • Použijte klíčové slovo while místo for
  • Podmínku uzavřete do hranatých závorek
    • Lze použít stejné příznaky pro číselné porovnání jako u IF (-le apod.)
  • Podmínky lze řetězit nebo použít dvojité závorky jako u příkazů IF, s && (AND) nebo || (OR)
  • V kódu musí být změna, která ukončí smyčku (jinak hrozí nekonečná smyčka!)
Úvod do Bash skriptování

Příklad příkazu WHILE

Jednoduchý příklad:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Úvod do Bash skriptování

Pozor na nekonečnou smyčku

Pozor na nekonečnou smyčku WHILE, pokud není splněna podmínka ukončení.

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # don't increment x. It never reaches 3!
    # ((x+=1)) 
done

Toto bude tisknout 1 donekonečna!

Úvod do Bash skriptování

Pojďme si procvičit!

Úvod do Bash skriptování

Preparing Video For Download...