Bash Scripting – While Loop

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

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ázvom a> s hodnotou 7.
  • while [ $a -gt 4 ];> : Spustí cyklus while, ktorý pokračuje tak dlho, ako je hodnota a> 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 premennej a> do konzoly.
  • ((a--))> : Znižuje hodnotu a> o 1. Toto je skrátený spôsob písania a=$((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

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.txt file> , 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 premennej line> , 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

čí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

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ázvom i> s hodnotou 1.
  • while [ $i -le 4 ];> : Spustí cyklus while, ktorý pokračuje tak dlho, ako je hodnota i> 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 premennej i> do konzoly.
  • ((i++))> : Zvyšuje hodnotu i> o 1. Toto je skrátený spôsob písania i=$((i + 1))> .
  • done> : Označuje koniec bloku kódu pre cyklus while.
while loop v Linuxe

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žíva getopts> analyzovať možnosti príkazového riadka. Uvedené možnosti sú n> a a> , 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ú narazil getopts> .
  • n) name=${OPTARG};;> : Ak je možnosť -n> , priradí premennej hodnotu zodpovedajúceho argumentu name> .
  • a) age=${OPTARG};;> : Ak je možnosť -a> , priradí premennej hodnotu zodpovedajúceho argumentu age> .
  • *) 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

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

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

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

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

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

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.