Bash Scripting – While Loop
A pričom slučka je príkaz, ktorý iteruje cez blok kódu, kým sa špecifikovaná podmienka nevyhodnotí ako nepravdivá. Tento príkaz alebo slučku môžeme použiť v našom programe, keď nevieme, koľkokrát sa podmienka vyhodnotí ako pravdivá, pred vyhodnotením ako nepravda.
Obsah
- Syntax cyklu while v skriptovaní BASH
- Príklad opakovania pomocou príkazu while v systéme Linux
- Čítanie súboru so slučkou while
- Nekonečná slučka while
- Slučka while na opakovanie pevne stanoveného počtu opakovaní
- Prečítajte si argument príkazového riadka s možnosťami getopts
- Slučka v štýle C
- Slučka while na vykonávanie operácií so súborom
- Zápis do súboru pomocou while cyklu
- Prerušte a pokračujte v používaní počas slučky
- Často kladené otázky
Syntax cyklu while v skriptovaní BASH
while [ condition ]; do # statements # commands done
Ak je podmienka pravdivá, príkazy v bloku while sa vykonajú a po kontrole podmienky sa znova opakujú. Ak je podmienka nepravdivá, príkazy v bloku while sa preskočia a vykonajú sa príkazy po bloku while.
Príklad opakovania pomocou príkazu while v systéme Linux
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
a=7
zatiaľ čo [ $a -gt 4 ];
robiť
echo $a
((a–))
hotový
echo Out of the loop
Vysvetlenie:
-
#!/usr/bin/bash>: Tento riadok sa nazýva shebang a označuje cestu k tlmočníkovi, ktorý by sa mal použiť na vykonanie skriptu. V tomto prípade určuje, že by sa mal použiť shell Bash. -
a=7>: Inicializuje premennú s názvoma>s hodnotou 7. -
while [ $a -gt 4 ];>: Spustí cyklus while, ktorý pokračuje tak dlho, ako je hodnotaa>je väčší ako 4. -
do>: Označuje začiatok bloku kódu, ktorý sa má vykonať v rámci cyklu while. -
echo $a>: Vytlačí aktuálnu hodnotu premenneja>do konzoly. -
((a--))>: Znižuje hodnotua>o 1. Toto je skrátený spôsob písaniaa=$((a - 1))>. -
done>: Označuje koniec bloku kódu pre cyklus while. -
echo 'Out of the loop'>: Po dokončení cyklu while sa vytlačí zo slučky do konzoly.
Kým Loop v Linuxe
Stručne povedané, tento skript inicializuje premennú ` a`> s hodnotou 7, potom vstúpi do cyklu while, ktorý pokračuje tak dlho, ako je ` a`> je väčšia ako 4. V rámci cyklu vytlačí aktuálnu hodnotu ` a`> a zníži ho o 1 v každej iterácii. Raz ` a`> bude 4 alebo menej, slučka sa ukončí a skript vypíše mimo slučku na konzolu.
Čítanie súboru so slučkou while
Môžeme čítať súbor s while slučkou v BASH. Analyzovaním určitých parametrov na podmienku cyklu while môžeme iterovať súbor riadok po riadku alebo podľa iných skupín, ako sú znaky alebo slová.
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
súbor=temp.txt
pri čítaní -r riadok;
robiť
echo $line
hotovo <$súbor
Vysvetlenie:
-
#!/usr/bin/bash>: Tento riadok shebang určuje, že na interpretáciu skriptu by sa mal použiť shell Bash. -
file=temp.txt>: K premennej priradí reťazec temp.txtfile>, ktorý predstavuje názov súboru, ktorý sa má čítať. -
while read -r line;>: Spustí cyklus while, ktorý načíta každý riadok zo zadaného súboru. -
do>: Označuje začiatok bloku kódu, ktorý sa má vykonať v rámci cyklu while. -
echo $line>: Vytlačí obsah premennejline>, ktorý predstavuje aktuálny riadok čítaný zo súboru do konzoly. -
done>: Označuje koniec bloku kódu pre cyklus while. -
<'$file'>: Presmeruje vstup cyklu while tak, aby pochádzal zo zadaného súboru, v tomto prípade z temp.txt.
Stručne povedané, tento skript prečíta každý riadok zo súboru temp.txt a vytlačí ho do konzoly, kým v súbore nezostanú žiadne ďalšie riadky. The -r> možnosť s read> príkaz sa používa na zabezpečenie toho, aby sa spätné lomky vo vstupe považovali za doslovné znaky.
čítať súbor pomocou príkazu while v systéme Linux
Na skutočné načítanie riadkov alebo znakov zo súboru používame príkaz read. Príkaz read sa odovzdá s argumentom -r, ktorý ignoruje escapovanie znakov, ak sa objaví , a preto je analyzovaný ako jeho. Čítame riadok zo súboru uvedeného za príkazom done. Príkaz read načíta riadok zo spomínaného súboru a cykly while sa skončia po prečítaní posledného riadku zo súboru (nezostane už žiadny riadok na čítanie).
Takto môžeme čítať obsah súboru pomocou while cyklu v BASH.
Nekonečná slučka while
Na vytvorenie nekonečnej slučky pomocou príkazu while. Do cyklu while nemusíme vkladať žiadnu podmienku, a preto sa cyklus opakuje donekonečna. Nižšie je uvedený príklad nekonečnej slučky while:
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
zatiaľ čo:
robiť
echo Nekonečná slučka
# Skript môžeme ukončiť stlačením Ctrl + C
hotový
Vysvetlenie:
-
#!/usr/bin/bash>: Riadok shebang určuje, že na interpretáciu skriptu by sa mal použiť shell Bash. -
while :>: Spustí nekonečnú slučku. The:>(dvojbodka) je príkaz zabudovaný do shellu, ktorý vždy vráti hodnotu true, čím efektívne vytvorí nekonečnú slučku. -
do>: Označuje začiatok bloku kódu, ktorý sa má vykonať v rámci nekonečnej slučky. -
echo 'An Infinite loop'>: Vytlačí reťazec Infinite loop do konzoly v každej iterácii cyklu. -
# We can press Ctrl + C to exit the script>: Toto je komentár, ktorý naznačuje, že skript môžete prerušiť stlačením Ctrl + C v termináli. Ctrl + C je bežný spôsob prerušenia a ukončenia spustených skriptov v termináli. -
done>: Označuje koniec bloku kódu pre nekonečnú slučku.
Stručne povedané, tento skript vytvára nekonečnú slučku, ktorá nepretržite opakuje správu Nekonečná slučka do konzoly. Cyklus je možné prerušiť a skript ukončiť stlačením Ctrl + C v termináli.
Nekonečná slučka pomocou príkazu While v systéme Linux
Slučka while v skripte sa teda bude opakovať nekonečne dlho. Slučku alebo skript môžeme manuálne prerušiť pomocou CTRL + C.
Slučka while na opakovanie pevne stanoveného počtu opakovaní
Môžeme použiť cyklus while na iteráciu v pevnom počte opakovaní, môžeme nastaviť podmienku tak, aby bola -le alebo menšia ako číslo rovnajúce sa číslu, a cyklus sa bude opakovať, kým nebude iterátor menší alebo rovný číslu uvedenému v kondícia. Tiež musíme manuálne zvýšiť iterátor, aby sme udržali opakovač cyklu, inak bude cyklus pokračovať navždy.
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
i=1
# číslo 4 môže byť limitom
# iterujte slučku
pričom [ $i -le 4 ];
robiť
echo $i
((i++))
hotový
Vysvetlenie:
-
#!/usr/bin/bash>: Riadok shebang určuje, že na interpretáciu skriptu by sa mal použiť shell Bash. -
i=1>: Inicializuje premennú s názvomi>s hodnotou 1. -
while [ $i -le 4 ];>: Spustí cyklus while, ktorý pokračuje tak dlho, ako je hodnotai>je menšie alebo rovné 4. -
do>: Označuje začiatok bloku kódu, ktorý sa má vykonať v rámci cyklu while. -
echo $i>: Vytlačí aktuálnu hodnotu premenneji>do konzoly. -
((i++))>: Zvyšuje hodnotui>o 1. Toto je skrátený spôsob písaniai=$((i + 1))>. -
done>: Označuje koniec bloku kódu pre cyklus while.
while loop v Linuxe
Vo vyššie uvedenom príklade vidíme, že cyklus sa opakuje definovaný počet krát. Keďže sme inicializovali počítadlo na 1 a podmienkou je opakovať cyklus, kým nebude iterátor menší alebo rovný číslu v tomto prípade 4. Môžeme teda zmeniť číslo v podmienke podľa našej požiadavky.
Prečítajte si argument príkazového riadka s možnosťami getopts
Môžeme použiť možnosti get ops na čítanie vstupu z príkazového riadku a ak existuje viacero argumentov, môžeme ich skontrolovať a analyzovať jeden po druhom pomocou cyklu while. getopts je nástroj na získanie vstupu používateľa z príkazového riadku. Môžeme mať viacero možností na analýzu z príkazového riadku a pomocou slučiek getopts a while môžeme vytvoriť profesionálne vyzerajúci program na zadávanie vstupu používateľa.
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim while.sh
#!/bin/bash
zatiaľ čo getopts n:a: OPT
robiť
prípad ${OPT} v
n) meno=${OPTARG} ;;
a) vek=${OPTARG} ;;
*) echo Neplatná možnosť
výstup 1;
esac
hotový
printf Volám sa $meno a mám $vek rokov
Vysvetlenie:
-
#!/bin/bash>: Riadok shebang určuje, že na interpretáciu skriptu by sa mal použiť shell Bash. -
while getopts n:a: OPT>: Spustí slučku, ktorá používagetopts>analyzovať možnosti príkazového riadka. Uvedené možnosti sún>aa>, po oboch sa očakáva, že bude nasledovať hádka. -
do>: Označuje začiatok bloku kódu, ktorý sa má vykonať v rámci cyklu. -
case '${OPT}' in>: Spustí príkaz case, ktorý vyhodnotí hodnotu voľby, na ktorú narazilgetopts>. -
n) name=${OPTARG};;>: Ak je možnosť-n>, priradí premennej hodnotu zodpovedajúceho argumentuname>. -
a) age=${OPTARG};;>: Ak je možnosť-a>, priradí premennej hodnotu zodpovedajúceho argumentuage>. -
*) echo 'Invalid option'>: Ak sa nájde neplatná voľba, vytlačí sa chybové hlásenie na konzole. -
exit 1;;>: Ukončí skript s nenulovým stavovým kódom, ktorý označuje chybu. -
esac>: Ukončí vyhlásenie prípadu. -
done>: Označuje koniec bloku kódu pre slučku. -
printf 'My name is $name and am $age years old '>: Vytlačí naformátovanú správu do konzoly s použitím hodnôt `name`>a 'age`>získané z možností príkazového riadka.
Kým slučka v Linuxe
V tomto prípade máme dve možnosti, a to meno a vek, môžete mať viacero možností. Musíme určiť, ktorú možnosť použijeme príkazy switch case a z príkazového riadku pomocou voľby -shorthand. V tomto prípade sme použili -n pre meno a -a pre vek . Máme tiež predvolenú alebo neplatnú kontrolu veľkých a malých písmen, aby sme vydržali, že neanalyzujeme nesprávne argumenty. Hodnotu opcie môžeme priradiť pomocou OPTARG premenná, ktorá analyzuje hodnotu poskytnutú možnosti.
Cyklus while sa tu používa na iteráciu, kým z príkazového riadku neprejdú žiadne možnosti. Skontrolujeme možnosť -n a -a a opakujeme, kým nestlačíte kláves návratu vozíka alebo enter a neexistujú žiadne ďalšie možnosti na analýzu.
Slučka v štýle C
Môžeme použiť cyklus while v štýle C v BASH, premenné je potrebné vyhodnotiť štýlom BASH, ale celková syntax vyzerá ako C. Môžeme použiť operátory ako , <= a tak ďalej v stave cyklu while a teda sa nazýva ako slučka while v štýle C.
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim c-style-while.sh
#!/bin/bash
i=0
zatiaľ čo ((i <12))
robiť
echo $i
((i+=2))
hotový
c-style-while
V tomto príklade vidíme, že cyklus while má podmienku s operátormi, ktoré nie sú bash ako -le, -ge, atď. Namiesto toho používame v podmienke operátory v štýle C. Zvyšok cyklu je základný cyklus ako v BASH, premenná alebo iterátor i je inkrementovaný o dva, ako môžeme vidieť v poslednom príkaze tela cyklu. Slučka sa teda opakuje 5-krát.
Slučka while na vykonávanie operácií so súborom
So súborom môžeme vykonávať operácie, ako je čítanie iba určitej časti súboru. Ak máme stĺpce, ktoré sú naformátované konkrétnym spôsobom, môžeme použiť premenné na ich priradenie a vytlačenie údajov o jednom riadku.
Tu je príklad názvu súboru wh.txt
vim wh.txt
vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade používame textový editor `vim`.
vim file-while.sh
Typ jazyka bol uvoľnený
Python general 1991
Javascript web 1995
Java mobile 1995
Rust embedded 2010
Choďte do backendu 2007
vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade používame textový editor `vim`.
vim file-while.sh
#!/bin/bash
pri čítaní a b c
robiť
echo $b – $a
hotový
Kým slučka v Linuxe
V tomto príklade máme tri riadky, obsah čítame tak, že ich priradíme k premenným a,b a c, môže to byť čokoľvek, ale nezabudnite ich použiť v tele cyklu. Môžeme vybrať konkrétny stĺpec ako b a a a môžeme s nimi tlačiť alebo vykonávať akékoľvek operácie. To sa však v súbore neodrazí, pretože ide len o premenné lokálneho skriptu.
Zápis do súboru pomocou while cyklu
Do súboru môžeme zapisovať vstupom používateľa v slučke while. Slučku while môžeme použiť na iteráciu, kým manuálne neopustíme cyklus pomocou CTRL + D uložením zmien do súboru alebo pomocou CTRL + C, aby sme sa vyhli zápisu do súboru. Príkaz read používame na zadanie textu z príkazového riadku a jeho analýzu do súboru.
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim write-wh.sh
#! /bin/bash
súbor=wh.txt
echo Zadajte obsah do súboru $file
pri čítaní riadku
robiť
echo $line>> $file
hotový
while loop v Linuxe
Takže z vyššie uvedeného príkladu sme boli schopní zadať text do súboru pomocou while cyklu a príkazu read. Na opustenie cyklu a uloženie zmien v súbore použijeme klávesy CTRL+D a na výstup z cyklu bez uloženia čohokoľvek do súboru môžeme použiť klávesy CTRL+C. Text z príkazového riadku teda zadávame do textového súboru pomocou príkazu read a while cyklu.
Prerušte a pokračujte v používaní počas slučky
Prestávka a pokračovanie sú nevyhnutné v programe, ktorý sa zaoberá príkazmi cyklu, pretože riadia tok príkazov cyklu bez akýchkoľvek explicitných podmienok.
Break statement v While Loop
Príkazy break používame na opustenie cyklu bez toho, aby sme čakali, kým sa podmienka cyklu while vyhodnotí ako nepravda. Tento príkaz možno použiť v rámci bloku slučky. Toto je možné použiť na výstup z nekonečnej slučky s programovou podmienkou vo vnútri slučky, a tak udržať kontrolu nad slučkou.
Napríklad máme skript, ktorý počíta od 1 a navždy. Ale môžeme sa programovo vymaniť z cyklu pomocou príkazu break v tele cyklu s podmienkou.
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
i=1
zatiaľ čo:
robiť
echo $i
if [ $i -eq 20]; potom
echo Toto je koniec slučky
prestávka
byť
((i++))
hotový
Príkaz Break while loop v Linuxe
Zo skriptu a vykonania môžeme vidieť, že sa nám podarilo prerušiť alebo ukončiť nekonečnú slučku pomocou podmieneného príkazu a príkazu break. Príkaz break sa teda používa na získanie riadiaceho toku programu/skriptu zvnútra cyklu while, aby sa tento cyklus vymanil bez toho, aby sa podmienka cyklu vyhodnotila ako nepravda.
Pokračujte v príkaze While Loop
Pomocou príkazu continue môžeme urobiť opak príkazu break. Preskočí na začiatok bloku slučky a znova sa opakuje. To sa dá použiť na preskočenie určitých príkazov za určitých podmienok a tým umožňuje zmenu toku slučky.
Napríklad, ak máme premennú inicializovanú na 1 a chceme zobraziť iba čísla deliteľné piatimi alebo v určitom vzore podľa podmienky, môžeme na to použiť príkazy continue. To umožňuje iteráciu cez slučku požadovaným spôsobom.
Najprv vytvoríme textový súbor pomocou textového editora v Linuxe, v tomto prípade použijeme textový editor `vim`.
vim while.sh
#!/usr/bin/bash
i=1
zatiaľ čo [ $i -lt 30 ];
robiť
((i++))
if [[ $(( $i % 5 )) -ne 0 ]];
potom
ďalej
byť
echo $i
hotový
Pokračovať vo vyhlásení v slučke While v linuxe
Ako vidíme príkaz continue, preskočí na začiatok bloku a spustí vykonávanie príkazov preskočením nasledujúcich príkazov v bloku. Cyklus while iteruje iba pre hodnotu variabilný i je menej ako 30, teda podmienka if kontroluje, či je variabilný i je deliteľné 5, a ak nie, opakujeme znova pomocou continue a zvyšujeme hodnotu premennej i. The variabilný i Ozve sa iba vtedy, ak je deliteľná 5, teda podmienka if je vyhodnotená ako nepravda a nestretneme sa s príkazom continue a nespustíme sa s normálnym priebehom cyklu. Robí sa to preto, aby sa predišlo zaznamenávaniu každého čísla a vytlačili sa iba čísla, ktoré nenasledujú vzor alebo podmienku v príkaze if alebo v iných podmienených príkazoch.
Často kladené otázky
1. Čo je „ while`> slučka v skriptovaní Bash?
A while> loop je príkaz riadiaceho toku v skriptovaní Bash, ktorý umožňuje opakované spustenie určitého bloku kódu, pokiaľ je zadaná podmienka pravdivá. Slučka poskytuje spôsob automatizácie opakujúcich sa úloh a je základnou konštrukciou pri skriptovaní a programovaní.
2. Ako funguje syntax ` while`> slučkový vzhľad v Bash?
Základná syntax a while> slučka v Bash je nasledovná:
kým [ podmienka ]
robiť
# Kód, ktorý sa má vykonať, kým je podmienka pravdivá
hotový
' condition`> je test, ktorý sa vyskytuje pred každou iteráciou cyklu. Ak je podmienka pravdivá, vykoná sa kód v rámci cyklu. Ak je podmienka nepravdivá, cyklus sa ukončí a skript pokračuje ďalším príkazom po ` done`> vyhlásenie.
3. Aká je úloha ` (( ... ))`> postaviť v Bash while> slučka?
' (( ... ))`> konstrukt v Bash sa používa na aritmetické operácie. V kontexte „ while`> slučky, často sa používa na vyhodnotenie aritmetických podmienok.
Napríklad: ` ((i <10))> `> skontroluje, či premenná ` i`> je menšia ako 10. To vám umožňuje používať aritmetické výrazy priamo v stave cyklu, čo je obzvlášť užitočné pri numerických porovnávaniach.
4. Ako vytvoriť nekonečnú slučku pomocou ` while`> v Bash?
Nekonečná slučka v Bash môže byť vytvorená poskytnutím podmienky, ktorá sa vždy vyhodnotí ako pravdivá.
Napríklad:
zatiaľ čo pravda
robiť
# Kód pre nekonečnú slučku
hotový
Prípadne môžete v podmienke použiť nenulovú konštantu, napr ` while [ 1 ]`> , aby ste dosiahli rovnaký výsledok. Nekonečné cykly sú užitočné v situáciách, keď sa vyžaduje nepretržité vykonávanie až do manuálneho prerušenia.
Záver
V tomto článku sme diskutovali o skriptovacej slučke BASH, ktorá sa ukazuje ako všestranný nástroj na opakované vykonávanie bloku kódu na základe špecifikovanej podmienky. Základná syntax zahŕňa definovanie podmienky v hranatých zátvorkách, čo umožňuje flexibilné iterácie. Článok skúma rôzne aplikácie cyklov while, vrátane čítania zo súborov, vytvárania nekonečných cyklov, pevných iterácií, analýzy argumentov príkazového riadka a používania príkazov break a continue. Od syntaxe v štýle C až po interaktívne písanie súborov, každý príklad demonštruje prispôsobivosť slučky pri riešení rôznych potrieb skriptovania. Tento komplexný prehľad podčiarkuje význam cyklu while v skriptovaní BASH a poskytuje robustný mechanizmus na kontrolované opakovanie a efektívne vykonávanie kódu.