Bash 'For' Loop: Návod a příklady

Bash (Bourne Again Shell) je příkazový řádek a skriptovací jazyk shellu v operačních systémech GNU/Linux. Je to výchozí shell pro většinu distribucí Linuxu.

Stejně jako většina skriptovacích jazyků poskytuje Bash syntaxe smyček pro opakované opakování podobných úkolů. V tomto článku se naučíme, jak používat pro smyčka v Bash.

Úvod

Typický Bash skript obsahuje řadu příkazů, které mají být provedeny jeden po druhém. Proměnné lze použít k uložení řetězců, celočíselných indexových hodnot, výsledků příkazu atd. Smyčky jsou vyžadovány, když chce uživatel provést určitý příkaz vícekrát. Je zvláště užitečné, když výstup jednoho příkazu je ve formě seznamu a na každém výsledku v seznamu má být spuštěn druhý příkaz.

Obecná syntaxe

Obecná syntaxe pro pro smyčka v Bash je:

pro in do ... ... hotovo

Tady, je proměnná Bash, což musí být platný název proměnné shellu Linux, tj. název obsahuje kombinaci písmen (az, AZ), číslic (0-9) a podtržítka ( _ ) a musí začínat buď písmenem nebo podtržítko.

The je buď vlastní rozsah celočíselných indexů, které se budou opakovat, nebo vlastní seznam celých čísel nebo řetězců. Může obsahovat i jiný linuxový příkaz, výstup takového příkazu však musí být oddělen mezerami nebo znaky nového řádku, tj. analyzovatelný Bashem do seznamu (Seznam v Bash je v podstatě sbírka hodnot oddělených mezerou nebo novým řádkem ).

Jakýkoli příkaz (příkazy), který se má provést, musí být umístěn uvnitř udělat..hotovo blok.

Podívejme se na několik jednoduchých příkladů.

Smyčka na rozsahu celočíselných hodnot: Následující kód vytváří adresáře s názvem dir1, dir2, dir3 až do dir10.

for i in {1..10} do mkdir dir$i done

Smyčka na seznamu pevných hodnot: Následující kód vytiskne každý řetězec nebo celé číslo v daném pevném seznamu.

pro i v Ahoj 1 2 3 Nashledanou! do echo $i hotovo

Smyčka na výstupu příkazu: Následující kód zacyklí výstup z ls a vytiskne název každého souboru v daném formátu.

pro i v `ls` do echo "Název souboru je $i" hotovo

Syntaxe založená na výrazech

V Bash je také možná syntaxe založená na výrazech podobná programovacímu jazyku C:

for ((Výraz 1; Výraz 2; Výraz 3)) do ... ... hotovo

Tady, Výraz 1 je inicializace indexové proměnné (proměnných). Výraz 2 je stav, kdy musí být smyčka opuštěna; tato podmínka je kontrolována v každé iteraci. Výraz 3 specifikuje zvýšení/snížení/změnu hodnoty indexové proměnné (proměnných)

Následující příklad jednoduše vypíše hodnoty od 0 do 4:

for ((i=0;i<5;i++)) do echo $i done

Následující příklad vytváří nekonečnou smyčku, protože nejsou zadány žádné výrazy:

for (( ; ; )) do echo "Stiskněte Ctrl-C pro zastavení" hotovo

Přerušit a pokračovat

Break Statement for Conditional Exit

Můžeme také použít podmíněný příkaz -li uvnitř smyčky. The -li příkaz lze použít s a přestávka pro podmíněný výstup ze smyčky.

for ((i=0;i<10;i++)) do if [[ $i -eq 5 ]] then break else echo $i; fi hotovo

Výše uvedená smyčka vytiskne čísla od 0 do 4. Poté, když je hodnota i 5, smyčka se opustí. To je zvláště užitečné, když má být smyčka ukončena, když příkaz poskytuje specifický výstup. Například následující smyčka se přeruší, pokud a když najde prázdný soubor.

pro soubor v `ls` do flen=`wc -c $soubor` if [[ "$flen" = "0 $soubor" ]] potom echo "$soubor je prázdný" break else echo $flen fi hotovo 

Příkaz wc -c vytiskne počet řádků v souboru . Vytiskne to ve formátu , například, 10 test.txt. Opustíme smyčku, když je počet řádků 0, tj. prázdný soubor.

Pokračovat ve výpisu a podmínečně přeskočit iteraci

Podobně jako C a mnoho dalších programovacích jazyků má bash také a pokračovat pro přeskočení zbývající části iterace ve smyčce, pokud je splněna určitá podmínka.

for ((i=0;i<10;i++)) proveďte if [[ $i -eq 5 ]] pak pokračujte fi echo $i; Hotovo

Výše uvedený cyklus vytiskne čísla od 0 do 10, kromě 5, protože během iterace i=5 existuje příkaz continue, který přeskočí zbytek kódu ve smyčce na začátku s iterací i=6.

V následujícím příkladu vytiskneme počet řádků v souboru a konkrétní iteraci pokračovat pokud je to adresář a ne soubor.

pro soubor v `ls` proveďte if [[ -d $file ]] pak pokračujte fi wc -c "$file" hotovo

[[ -d $file ]] zkontroluje, zda je soubor adresář. Pokud ano, přeskočíme na další soubor, tedy další iteraci. Pokud se nejedná o adresář, vytiskneme počet řádků v souboru pomocí toaleta příkaz, jak bylo také ukázáno dříve.

Používání smyček: Skripty a příkazový řádek

Syntaxi smyčky lze použít přímo v shellu Bash nebo ze souboru skriptu shellu. Jednou pro Cyklus syntaxe je zadán do shellu, shell pokračuje ve výzvě, aby nechal uživatele pokračovat v zacyklení příkazů.

Nebo to může uživatel uložit do souboru skriptu a spustit soubor skriptu.

The #!/bin/bash na začátku určuje interpret, který se má použít při spuštění souboru. Ačkoli je Bash dnes nejběžněji používaným shellem, někteří uživatelé preferují shelly jako zsh, který by měl být specifikován místo bash na začátku tohoto souboru.

Udělit oprávnění ke spuštění pro tento soubor spusťte:

chmod +x test.sh

Konečně, spustit soubor, spustit:

./test.sh

Závěr

The pro smyčka v Bash je docela jednoduchá funkce, ale má své použití v téměř každém druhu složitého scénáře skriptování. Naučit se to jde dlouhou cestou, ať už jste běžný nebo pokročilý uživatel Linuxu nebo se začínáte učit automatizaci pro úlohy správy systému a DevOps.