Použitie slučky „until“ v skripte Bash na zacyklenie príkazov.
Bash (Bourne Again Shell) je príkazový riadok a skriptovací jazyk shellu v operačných systémoch GNU/Linux. Je to predvolený shell pre väčšinu distribúcií Linuxu.
Rovnako ako väčšina skriptovacích jazykov, aj Bash poskytuje syntaxe slučiek na opakovanie podobných úloh viackrát. V tomto článku sa naučíme, ako používať kým
slučka v Bash.
Úvod
The kým
slučka v Bash sa používa na vykonanie príkazu (príkazov) (vykonaných príkazov) viackrát na základe výstupu iného príkazu (príkazov) (príkazy podmienok). Vykonané príkazy budú bežať, kým príkaz podmienka neprestane zlyhávať (t. j. vráti nenulový stav. Akýkoľvek príkaz v systéme Linux vráti 0 pre úspech a nenulové celé číslo pre zlyhanie). Toto je presný opak zatiaľ čo
slučka, v ktorej vykonávané príkazy bežia, kým nie je úspešný príkaz podmienky.
Ak existuje viacero podmienkových príkazov, príkaz zohľadňuje iba stav posledného príkazu v zozname, t.j. cyklus bude bežať, kým posledný príkaz v zozname neprestane zlyhávať.
Všeobecná syntax
Všeobecná syntax pre kým
slučka v Bash je:
kým to nebude hotové
Zoznam príkazov na vykonanie bude bežať, kým posledný príkaz v zozname príkazov podmienok zlyhá. Keď je posledný príkaz úspešný, cyklus sa ukončí.
Používatelia môžu zadať ľubovoľný spustiteľný súbor v zoznamoch príkazov. Môžu to byť štandardné linuxové programy alebo vlastné užívateľské programy či skripty. Každý príkaz by mal byť buď na novom riadku, alebo oddelený bodkočiarkou na rovnakom riadku.
Pozrime sa na niekoľko príkladov.
Slučovanie, kým premenná nebude mať konkrétnu hodnotu: Nasledujúci cyklus sa vykoná až do hodnoty premennej X
je 10.
x=0, kým [[ $x -eq 10 ]] neurobí echo $x ((x++)) hotovo
V každej iterácii kontrolujeme, či je hodnota x 10. Hodnota sa kontroluje pomocou test
príkaz. [[Výraz]]
je syntax príkazu test (pozri mužský test
).
Potom vo vnútri urobiť...hotovo
bloku, jednoducho vytlačíme hodnotu x a zvýšime ju. Cyklus sa ukončí, keď je príkaz podmienky úspešný, t.j x $
rovná sa 10
.
Poznámka: Indexová premenná, ktorá sa má použiť v slučke „until“, sa inicializuje buď pred slučkou „until“ alebo v príkazoch podmienky, na rozdiel od slučky for, ktorá umožňuje inicializovať premennú implicitne.
S viacerými príkazmi podmienok: Nasledujúca slučka vytvorí 5 pomenovaných adresárov dir0, dir1, ... dir4
.
z=0 do echo "Ahoj" echo "Ahoj" [[ $z -eq 5 ]] do echo "Vytváram sa dir$z..." mkdir dir$z ((z++)) hotovo
Prvé príkazy echo „Hi“ a echo „Bye“ sa vykonajú raz úplne; ich úspech alebo zlyhanie nemá žiadny vplyv na to, ako dlho bude slučka prebiehať.
Potom sa vykoná testovací príkaz na kontrolu hodnoty premennej z. Kým tento príkaz neprestane zlyhávať, t.j. kým hodnota z nie je 5, príkazy podmienok a vykonané príkazy pokračujú v poradí. Tu pre každú iteráciu najprv spustí 2 príkazy echo v podmienke a potom príkaz 3. podmienky skontroluje hodnotu z. Ak nie je 5, vstúpi do cyklu a vykoná dané príkazy.
Prerušiť a pokračovať
Vyhlásenie o prerušení pre podmienený výstup
Môžeme použiť aj podmienený príkaz ak
vnútri slučky. The ak
príkaz možno použiť s a prestávka
príkaz na podmienený výstup zo slučky.
x=0, kým [[ $x -eq 10 ]] neurobí, ak [[ $x -eq 5 ]] break fi echo $x ((x++)) hotovo
Vyššie uvedená slučka do vytlačí čísla od 0 do 4. Potom, keď je hodnota i 5, cyklus sa preruší. Toto sa používa najmä vtedy, keď sa má slučka opustiť, keď príkaz poskytuje špecifický výstup.
Ak chcete podmienečne preskočiť iteráciu, pokračujte vo vyhlásení
Bash má tiež a ďalej
príkaz na preskočenie zostávajúcej časti iterácie v slučke, ak je splnená určitá podmienka.
x=0, kým [[ $x -eq 10 ]] neurobí, ak [[ $x -eq 5 ]] pokračuje fi echo $x ((x++)) hotovo
Vyššie uvedený cyklus vytlačí čísla od 0 do 10, okrem 5, pretože počas iterácie x=5
existuje príkaz continue, ktorý preskočí zvyšok kódu v slučke na začiatku iterácie x=6
.
Používanie slučiek: Skripty a príkazový riadok
Syntaxe slučiek je možné použiť v prostredí Bash priamo alebo zo spustiteľného súboru skriptu shellu. Podobný pre
a zatiaľ čo
slučky, raz an kým
Cyklus syntaxe je zadaný do shellu, shell pokračuje vo výzve, aby umožnil užívateľovi pokračovať v zacyklení príkazov.
Alebo to môže používateľ uložiť do súboru skriptu a spustiť súbor skriptu.
The #!/bin/bash
na začiatku určuje interpret, ktorý sa má použiť pri spustení súboru. Aj keď je v súčasnosti Bash najbežnejšie používaným shellom, niektorí používatelia uprednostňujú shell ako zsh
, ktorý by mal byť špecifikovaný namiesto bash na začiatku tohto súboru.
Udeliť povolenia na vykonanie pre tento súbor spustite:
chmod +x test.sh
nakoniec spustiť súbor, spustiť:
./test.sh
Záver
The kým
slučka je ďalšou dôležitou vlastnosťou skriptovania Bash. Má mimoriadny význam v zložitých skriptoch, keď sa očakáva, že určitá skupina programov vráti stav zlyhania a niektoré ďalšie príkazy sa majú vykonať na zaznamenanie zlyhania, podrobné zobrazenie chyby alebo jednoducho spustenie niektorých alternatívnych programov.