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

Použití smyčky „while“ ve skriptování Bash k iteraci příkazů.

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čky pro opakování podobného úkolu vícekrát. V tomto článku se naučíme, jak používat zatímco smyčka v Bash.

Úvod

The zatímco smyčka v Bash se používá k vykonání příkazu (příkazů) (prováděných příkazů) vícekrát na základě výstupu jiného příkazu (příkazů) (příkazy podmínek). Prováděné příkazy poběží, dokud se příkaz podmínky nespustí úspěšně (tj. vrátí stav 0. Jakýkoli příkaz v Linuxu vrátí 0 pro úspěch a nenulové celé číslo pro selhání).

Pokud existuje více příkazů podmínek, příkaz bere v úvahu pouze stav posledního příkazu v seznamu, tj. smyčka se provádí, dokud úspěšně neproběhne poslední příkaz v seznamu.

Obecná syntaxe

Obecná syntaxe pro zatímco smyčka v Bash je:

zatímco hotovo

Seznam příkazů pro provedení bude pokračovat, dokud poslední příkaz v seznamu příkazů podmínek úspěšně neproběhne a neukončí se se stavem 0. V iteraci, když poslední příkaz podmínky selže, smyčka se ukončí.

Uživatel může zadat libovolný spustitelný soubor v seznamech příkazů. Mohou to být standardní linuxové programy nebo vlastní uživatelské programy či skripty. Každý příkaz by měl být buď na novém řádku, nebo oddělený středníkem na stejném řádku.

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

Opakování, dokud proměnná nemá konkrétní hodnotu: Následující cyklus se provádí až do hodnoty proměnné X se nerovná 10.

x=0 zatímco [[ $x -ne 10 ]] do echo $x ((x++)) hotovo

V každé iteraci kontrolujeme, zda je hodnota x 10. Hodnota je kontrolována pomocí test příkaz. [[Výraz]] je syntaxe příkazu test (viz mužský test). Zde, protože používáme -ne operátor (což znamená „nerovná se“), testovací příkaz vrátí 0, tj. úspěch, pokud hodnota x není 10, a vrátí nenulovou hodnotu, tj. selhání, pokud hodnota x je 10.

Pak uvnitř udělat...hotovo bloku, vytiskneme hodnotu x a zvýšíme ji. Jakmile je hodnota x 10, testovací příkaz vrátí nenulový stav a smyčka se ukončí.

Poznámka: Proměnná index pro použití v cyklu while se inicializuje buď před smyčkou while nebo v příkazech podmínky, na rozdíl od cyklu for, který umožňuje inicializovat proměnnou implicitně.

S více příkazy podmínek: Následující smyčka vytvoří 5 pojmenovaných adresářů dir0, dir1, ... dir4.

z=0 while echo "Seznam souborů:" ls -l [[ $z -ne 5 ]] do echo "Vytváření dir$z..." mkdir dir$z ((z++)) hotovo

První příkazy echo "Seznam souborů:" a ls -l provede se jednou úplně; jejich úspěch nebo neúspěch nemá žádný vliv na to, jak dlouho smyčka poběží.

Poté se provede testovací příkaz pro kontrolu hodnoty proměnné z. Dokud hodnota z není 5, testovací příkaz vrací stav úspěchu, a proto smyčka běží dál. Příkazy podmínek a provedené příkazy běží v pořádku. Zde pro každou iteraci nejprve spustí příkaz echo a příkaz ls v podmínce a poté příkaz 3. podmínky zkontroluje hodnotu z. Pokud není 5, vstoupí do smyčky a provede dané příkazy.

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.

x=0 zatímco [[ $x -ne 10 ]] proveďte, pokud [[ $x -eq 5 ]] break fi echo $x ((x++)) hotovo

Výše uvedená smyčka while 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.

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

Bash má také a pokračovat pro přeskočení zbývající části iterace ve smyčce, pokud je splněna určitá podmínka.

x=0 zatímco [[ $x -ne 10 ]] proveďte if [[ $x -eq 5 ]] pokračujte fi echo $x ((x++)) hotovo

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

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

Syntaxe smyček lze použít v prostředí Bash přímo nebo ze spustitelného souboru skriptu shellu. Podobný pro a zatímco smyčky, jednou an zatímco 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 zatímco smyčka, podobná pro a dokud smyčky jsou důležitou funkcí ve skriptování Bash. Smyčka While má podobné použití jako smyčka dokud, až na to, že se používá ke spouštění alternativních příkazů/programů, když určitý program uspěje. To je často užitečné v pokročilých síťových skriptech, skriptech údržby systému atd.