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.