Bash Scripting – While Loop
A zatímco smyčka je příkaz, který iteruje přes blok kódu, dokud není zadaná podmínka vyhodnocena jako nepravdivá. Tento příkaz nebo smyčku můžeme použít v našem programu, když nevíme, kolikrát se podmínka vyhodnotí jako pravdivá, než se vyhodnotí jako nepravda.
Obsah
- Syntaxe cyklu while ve skriptování BASH
- Příklad opakování pomocí příkazu while v Linuxu
- Čtení souboru s while smyčkou
- Nekonečná smyčka while
- Smyčka while pro iteraci pro pevně stanovený počet opakování
- Přečtěte si argument příkazového řádku s možnostmi getopts
- Smyčka ve stylu C
- Zatímco smyčka pro provádění operací se souborem
- Zápis do souboru pomocí smyčky while
- Přerušte a pokračujte v používání while Loop
- Často kladené otázky
Syntaxe cyklu while ve skriptování BASH
while [ condition ]; do # statements # commands done
Pokud je podmínka pravdivá, příkazy uvnitř bloku while se provedou a po kontrole podmínky se znovu opakují. Také pokud je podmínka nepravdivá, příkazy uvnitř bloku while jsou přeskočeny a příkazy po bloku while jsou provedeny.
Příklad opakování pomocí příkazu while v Linuxu
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
a=7
zatímco [ $a -gt 4 ];
dělat
echo $a
((A-))
Hotovo
echo Mimo smyčku
Vysvětlení:
-
#!/usr/bin/bash>: Tento řádek se nazývá shebang a označuje cestu k interpretu, který by měl být použit ke spuštění skriptu. V tomto případě určuje, že by se měl použít shell Bash. -
a=7>: Inicializuje proměnnou s názvema>s hodnotou 7. -
while [ $a -gt 4 ];>: Spustí smyčku while, která pokračuje tak dlouho, dokud je hodnotaa>je větší než 4. -
do>: Označuje začátek bloku kódu, který se má provést v rámci cyklu while. -
echo $a>: Vytiskne aktuální hodnotu proměnnéa>do konzole. -
((a--))>: Snižuje hodnotua>o 1. Toto je zkrácený způsob psanía=$((a - 1))>. -
done>: Označuje konec bloku kódu pro smyčku while. -
echo 'Out of the loop'>: Vytiskne mimo smyčku do konzole po dokončení smyčky while.
Zatímco Loop v Linuxu
Stručně řečeno, tento skript inicializuje proměnnou ` a`> s hodnotou 7, poté vstoupí do cyklu while, který pokračuje tak dlouho, dokud ` a`> je větší než 4. V rámci cyklu vytiskne aktuální hodnotu ` a`> a sníží jej o 1 v každé iteraci. Jednou ` a`> bude 4 nebo méně, smyčka se ukončí a skript vytiskne mimo smyčku do konzoly.
Čtení souboru pomocí smyčky while
Můžeme číst soubor s while smyčkou v BASH. Analyzováním určitých parametrů na podmínku cyklu while můžeme iterovat soubor řádek po řádku nebo podle jiných skupin, jako jsou znaky nebo slova.
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
soubor=temp.txt
při čtení -r řádek;
dělat
echo $line
hotovo <$soubor
Vysvětlení:
-
#!/usr/bin/bash>: Tento řádek shebang určuje, že k interpretaci skriptu by měl být použit shell Bash. -
file=temp.txt>: Přiřadí řetězec temp.txt k proměnnéfile>, představující název souboru, který se má číst. -
while read -r line;>: Spustí smyčku while, která přečte každý řádek ze zadaného souboru. -
do>: Označuje začátek bloku kódu, který se má provést v rámci cyklu while. -
echo $line>: Vytiskne obsah proměnnéline>, který představuje aktuální řádek čtený ze souboru do konzole. -
done>: Označuje konec bloku kódu pro smyčku while. -
<'$file'>: Přesměruje vstup cyklu while tak, aby pocházel ze zadaného souboru, v tomto případě temp.txt.
Stručně řečeno, tento skript načte každý řádek ze souboru temp.txt a vytiskne jej do konzole, dokud v souboru nezůstanou žádné další řádky. The -r> možnost s read> příkaz se používá k zajištění toho, že zpětná lomítka ve vstupu budou považována za doslovné znaky.
číst soubor pomocí příkazu while v Linuxu
Pro skutečné načtení řádků nebo znaků ze souboru používáme příkaz read. Příkaz read je předán s argumentem -r, který ignoruje escapování znaků, pokud se objeví , a proto je analyzován jako jeho. Čteme řádek ze souboru uvedeného za příkazem done. Příkaz read přečte řádek ze zmíněného souboru a smyčky while končí načtením posledního řádku ze souboru (není ponechán žádný řádek ke čtení).
Takto můžeme číst obsah souboru pomocí while cyklu v BASH.
Nekonečná smyčka while
Chcete-li vytvořit nekonečnou smyčku pomocí příkazu while. Do cyklu while nemusíme vkládat žádnou podmínku, a proto se cyklus opakuje donekonečna. Níže je uveden příklad nekonečné smyčky while:
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
zatímco :
dělat
echo Nekonečná smyčka
# Skript můžeme ukončit stisknutím Ctrl + C
Hotovo
Vysvětlení:
-
#!/usr/bin/bash>: Řádek shebang určuje, že k interpretaci skriptu by měl být použit shell Bash. -
while :>: Zahájí nekonečnou smyčku. The:>(dvojtečka) je příkaz vestavěný do shellu, který vždy vrací true, čímž efektivně vytváří nekonečnou smyčku. -
do>: Označuje začátek bloku kódu, který se má provést v nekonečné smyčce. -
echo 'An Infinite loop'>: Tiskne řetězec Infinite loop do konzole v každé iteraci cyklu. -
# We can press Ctrl + C to exit the script>: Toto je komentář, který naznačuje, že skript můžete přerušit stisknutím Ctrl + C v terminálu. Ctrl + C je běžný způsob, jak přerušit a ukončit běžící skripty v terminálu. -
done>: Označuje konec bloku kódu pro nekonečnou smyčku.
Stručně řečeno, tento skript vytváří nekonečnou smyčku, která nepřetržitě opakuje zprávu Nekonečná smyčka do konzole. Smyčku lze přerušit a skript ukončit stisknutím Ctrl + C v terminálu.
Nekonečná smyčka pomocí příkazu While v Linuxu
Smyčka while ve skriptu se tedy bude opakovat nekonečně dlouho. Smyčku nebo skript můžeme ručně přerušit pomocí CTRL + C.
Smyčka while pro iteraci pro pevně stanovený počet opakování
Můžeme použít smyčku while k iteraci přes pevně stanovený počet opakování, můžeme nastavit podmínku tak, aby byla -le nebo menší než rovno číslu, a smyčka se bude iterovat, dokud nebude iterátor menší nebo roven číslu uvedenému v kondice. Také musíme inkrementovat iterátor ručně, abychom udrželi opakovač smyčky v tikání, jinak bude smyčka pokračovat navždy.
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
i=1
# číslo 4 může být limitem
# iterujte smyčku
zatímco [ $i -le 4 ];
dělat
echo $i
((i++))
Hotovo
Vysvětlení:
-
#!/usr/bin/bash>: Řádek shebang určuje, že k interpretaci skriptu by měl být použit shell Bash. -
i=1>: Inicializuje proměnnou s názvemi>s hodnotou 1. -
while [ $i -le 4 ];>: Inicializuje smyčku while, která pokračuje tak dlouho, dokud je hodnotai>je menší nebo roven 4. -
do>: Označuje začátek bloku kódu, který se má provést v rámci cyklu while. -
echo $i>: Vytiskne aktuální hodnotu proměnnéi>do konzole. -
((i++))>: Zvyšuje hodnotui>o 1. Toto je zkrácený způsob psaníi=$((i + 1))>. -
done>: Označuje konec bloku kódu pro smyčku while.
while loop v Linuxu
Ve výše uvedeném příkladu můžeme vidět, že smyčka se opakuje definovaný počet opakování. Protože jsme inicializovali čítač na 1 a podmínkou je opakovat cyklus, dokud nebude iterátor menší nebo roven číslu v tomto případě 4. Můžeme tedy změnit číslo v podmínce podle našeho požadavku.
Přečtěte si argument příkazového řádku s možnostmi getopts
Můžeme použít volby get ops ke čtení vstupu z příkazového řádku a pokud existuje více argumentů, můžeme je zkontrolovat a analyzovat jeden po druhém pomocí cyklu while. getopts je nástroj pro získání uživatelského vstupu z příkazového řádku. Můžeme mít více možností pro analýzu z příkazového řádku a pomocí getopts a smyček while můžeme vytvořit profesionálně vypadající program pro zadávání uživatele.
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim while.sh
#!/bin/bash
zatímco getopts n:a: OPT
dělat
pouzdro ${OPT} v
n) jmeno=${OPTARG} ;;
a) věk=${OPTARG} ;;
*) echo Neplatná volba
výstup 1 ;;
esac
Hotovo
printf Jmenuji se $jméno a je mi $věk let
Vysvětlení:
-
#!/bin/bash>: Řádek shebang určuje, že k interpretaci skriptu by měl být použit shell Bash. -
while getopts n:a: OPT>: Inicializuje smyčku, která používágetopts>analyzovat možnosti příkazového řádku. Uvedené možnosti jsoun>aa>, přičemž se očekává, že po obou bude následovat hádka. -
do>: Označuje začátek bloku kódu, který se má provést v rámci smyčky. -
case '${OPT}' in>: Spustí příkaz case, který vyhodnotí hodnotu možnosti, na kterou narazígetopts>. -
n) name=${OPTARG};;>: Pokud je možnost-n>, přiřadí proměnné hodnotu odpovídajícího argumentuname>. -
a) age=${OPTARG};;>: Pokud je možnost-a>, přiřadí proměnné hodnotu odpovídajícího argumentuage>. -
*) echo 'Invalid option'>: Pokud je zjištěna neplatná volba, vytiskne se na konzolu chybová zpráva. -
exit 1;;>: Ukončí skript s nenulovým stavovým kódem, což znamená chybu. -
esac>: Ukončí výpis případu. -
done>: Označuje konec bloku kódu pro smyčku. -
printf 'My name is $name and am $age years old '>: Vytiskne naformátovanou zprávu do konzole s použitím hodnot `name`>a 'age`>získané z možností příkazového řádku.
Zatímco smyčka v Linuxu
V tomto případě máme dvě možnosti, jmenovitě jméno a věk, můžete mít více možností. Musíme určit, kterou volbu použijeme příkazy switch case a z příkazového řádku pomocí volby -shorthand. V tomto případě jsme použili -n pro jméno a -a pro věk . Máme také výchozí nebo neplatnou kontrolu velkých a malých písmen, abychom vydrželi, že neanalyzujeme špatné argumenty. Hodnotu opce můžeme přiřadit pomocí OPTARG proměnná, která analyzuje hodnotu poskytnutou volbě.
Smyčka while se zde používá k iteraci, dokud nejsou z příkazového řádku předány žádné volby. Zkontrolujeme volbu -n a -a a iterujeme, dokud nestisknete klávesu návrat vozíku nebo klávesu enter a nebudou k dispozici žádné další možnosti k analýze.
Smyčka ve stylu C
Můžeme použít cyklus while ve stylu C v BASH, proměnné je třeba vyhodnotit stylem BASH, ale celková syntaxe vypadá jako C. Můžeme použít operátory jako , <= a tak dále v podmínce cyklu while a tedy nazývá se jako smyčka while ve stylu C.
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim c-style-while.sh
#!/bin/bash
i=0
zatímco ((i <12))
dělat
echo $i
((i+=2))
Hotovo
c-style-while
V tomto příkladu můžeme vidět, že cyklus while má podmínku s nebashovými operátory jako -le, -ge atd., místo toho v podmínce použijeme operátory ve stylu C. Zbytek smyčky je základní smyčka jako v BASH, proměnná nebo iterátor i je inkrementována o dvě, jak můžeme vidět v posledním příkazu těla smyčky. Smyčka se tedy opakuje 5krát.
Zatímco smyčka pro provádění operací se souborem
Můžeme provádět operace se souborem, jako je čtení pouze určité části souboru. Pokud máme sloupce, které jsou formátovány určitým způsobem, můžeme je přiřadit pomocí proměnných a vytisknout je v datovém čase jednoho řádku.
Zde je příklad názvu souboru wh.txt
vim wh.txt
vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim file-while.sh
Typ jazyka uvolněn
Python general 1991
Javascript web 1995
Java mobile 1995
Rust embedded 2010
Přejít backend 2007
vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim file-while.sh
#!/bin/bash
při čtení a b c
dělat
echo $b – $a
Hotovo
Zatímco smyčka v Linuxu
V tomto příkladu máme tři řádky, čteme obsah tak, že je přiřadíme k proměnným a,b a c, může to být cokoliv, ale nezapomeňte je použít v těle smyčky. Můžeme vybrat konkrétní sloupec jako b a a a můžeme s nimi tisknout nebo provádět jakékoli operace. To se však v souboru neprojeví, protože se jedná pouze o proměnné lokálního skriptu.
Zápis do souboru pomocí smyčky while
Můžeme zapisovat do souboru uživatelským vstupem ve smyčce while. Můžeme použít smyčku while k iteraci, dokud ručně neopustíme smyčku pomocí CTRL + D uložením změn do souboru nebo pomocí CTRL + C, abychom se vyhnuli zápisu do souboru. K zadání textu z příkazového řádku a jeho analýze do souboru používáme příkaz read.
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim write-wh.sh
#! /bin/bash
soubor=wh.txt
echo Vložte obsah do souboru $file
při čtení řádku
dělat
echo $line>> $file
Hotovo
while loop v Linuxu
Takže z výše uvedeného příkladu jsme byli schopni zadat text do souboru pomocí smyčky while a příkazu read. Pro ukončení smyčky a uložení změn do souboru použijeme klávesy CTRL+D a pro ukončení smyčky bez uložení čehokoli do souboru můžeme použít klávesy CTRL+C. Text z příkazové řádky tedy zadáváme do textového souboru pomocí příkazu read a while cyklu.
Přerušte a pokračujte v používání while Loop
Přestávka a pokračování jsou zásadní v programu, který se zabývá příkazy smyčky, protože řídí tok příkazů smyčky bez jakýchkoli explicitních podmínek.
Příkaz Break v While Loop
Příkazy break používáme k opuštění cyklu, aniž bychom čekali, až se podmínka cyklu while vyhodnotí jako nepravda. Tento příkaz lze použít v rámci bloku smyčky. Toho lze použít k výstupu z nekonečné smyčky s programovou podmínkou uvnitř smyčky a tím zachovat kontrolu nad smyčkou.
Máme například skript, který počítá od 1 a navždy. Ale můžeme programově vystoupit ze smyčky pomocí příkazu break uvnitř těla smyčky s podmínkou.
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
i=1
zatímco :
dělat
echo $i
if [ $i -eq 20]; pak
echo Toto je konec smyčky
přestávka
být
((i++))
Hotovo
Příkaz Break while loop v Linuxu
Ze skriptu a provádění můžeme vidět, že jsme byli schopni přerušit nebo ukončit nekonečnou smyčku pomocí podmíněného příkazu a příkazu break. Příkaz break se tedy používá k získání řídicího toku programu/skriptu zevnitř smyčky while, aby se smyčka opustila, aniž by se podmínka smyčky vyhodnotila jako nepravda.
Pokračujte v příkazu While Loop
Příkaz continue můžeme použít k opaku příkazu break. Přeskočí na začátek bloku smyčky a bude se opakovat znovu. Toho lze použít pro přeskakování určitých příkazů za určitých podmínek a tím umožňuje změnu toku smyčky.
Například, pokud máme proměnnou inicializovanou na 1 a chceme zobrazit pouze čísla dělitelná pěti nebo v určitém vzoru podle podmínky, můžeme k tomu použít příkazy continue. To umožňuje iteraci přes smyčku požadovaným způsobem.
Nejprve vytvoříme textový soubor pomocí textového editoru v Linuxu, v tomto případě používáme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
i=1
zatímco [ $i -lt 30 ];
dělat
((i++))
if [[ $(( $i % 5 )) -ne 0 ]];
pak
pokračovat
být
echo $i
Hotovo
Pokračovat ve smyčce While v linuxu
Jak vidíme, příkaz continue skočí na začátek bloku a spustí provádění příkazů přeskočením dalších příkazů uvnitř bloku. Cyklus while iteruje pouze pro hodnotu variabilní i je menší než 30, takže podmínka if kontroluje, zda je variabilní i je dělitelné 5, a pokud tomu tak není, iterujeme znovu pomocí continue a zvýšíme hodnotu proměnné i. The variabilní i dostane echo pouze v případě, že je dělitelná 5, takže podmínka if je vyhodnocena jako nepravda a my nenarazíme na příkaz continue a neseme s normálním tokem smyčky. To se provádí proto, aby se předešlo protokolování každého čísla a tiskla se pouze čísla, která se neřídí vzorem nebo podmínkou v příkazu if nebo jiných podmíněných příkazech.
Často kladené otázky
1. Co je ` while`> smyčka ve skriptování Bash?
A while> loop je příkaz řídicího toku ve skriptování Bash, který umožňuje opakované provádění určitého bloku kódu, pokud je zadaná podmínka pravdivá. Smyčka poskytuje způsob, jak automatizovat opakující se úkoly a je základní konstrukcí ve skriptování a programování.
2. Jak funguje syntaxe ` while`> smyčkový vzhled v Bash?
Základní syntaxe a while> smyčka v Bash je následující:
zatímco [ podmínka ]
dělat
# Kód, který se má provést, když je podmínka pravdivá
Hotovo
' condition`> je test, který probíhá před každou iterací cyklu. Pokud je podmínka pravdivá, provede se kód ve smyčce. Pokud je podmínka nepravdivá, smyčka se ukončí a skript pokračuje dalším příkazem za ` done`> prohlášení.
3. Jaká je role ` (( ... ))`> konstruovat v Bash while> smyčka?
' (( ... ))`> konstrukt v Bash se používá pro aritmetické operace. V kontextu „ while`> smyčka, často se používá k vyhodnocení aritmetických podmínek.
Například: ` ((i <10))> `> kontroluje, zda proměnná ` i`> je menší než 10. To vám umožňuje používat aritmetické výrazy přímo v podmínce smyčky, což je zvláště užitečné při práci s číselnými porovnáními.
4. Jak vytvořit nekonečnou smyčku pomocí ` while`> v Bash?
Nekonečnou smyčku v Bash lze vytvořit poskytnutím podmínky, která se vždy vyhodnotí jako pravdivá.
Například:
zatímco pravdivé
dělat
# Kód pro nekonečnou smyčku
Hotovo
Případně můžete v podmínce použít nenulovou konstantu, např ` while [ 1 ]`> , abyste dosáhli stejného výsledku. Nekonečné smyčky jsou užitečné v situacích, kdy je vyžadováno nepřetržité provádění až do ručního přerušení.
Závěr
V tomto článku jsme diskutovali o cyklu BASH skriptování while, který se ukázal jako všestranný nástroj pro opakované provádění bloku kódu na základě zadané podmínky. Základní syntaxe zahrnuje definování podmínky v hranatých závorkách, což umožňuje flexibilní iterace. Článek zkoumá různé aplikace smyček while, včetně čtení ze souborů, vytváření nekonečných smyček, pevných iterací, analýzy argumentů příkazového řádku a používání příkazů break a continue. Od syntaxe ve stylu C až po interaktivní psaní souborů, každý příklad demonstruje přizpůsobivost smyčky při řešení řady skriptovacích potřeb. Tento komplexní přehled podtrhuje význam smyčky while ve skriptování BASH a poskytuje robustní mechanismus pro řízené opakování a efektivní spouštění kódu.