Použitie cyklu „while“ v skriptovaní Bash na iteráciu 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 cyklu na opakovanie podobnej úlohy viackrát. V tomto článku sa naučíme, ako používať zatiaľ čo
slučka v Bash.
Úvod
The zatiaľ čo
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 sa príkaz podmienky nespustí úspešne (t. j. vráti stav 0. Akýkoľvek príkaz v systéme Linux vráti 0 pre úspech a nenulové celé číslo pre zlyhanie).
Ak existuje viacero príkazov podmienok, príkaz zohľadňuje iba stav posledného príkazu v zozname, t. j. cyklus sa vykonáva, kým sa úspešne nespustí posledný príkaz v zozname.
Všeobecná syntax
Všeobecná syntax pre zatiaľ čo
slučka v Bash je:
kým hotovo
Zoznam príkazov na vykonanie bude pokračovať, kým sa posledný príkaz v zozname príkazov podmienok úspešne nespustí a neskončí so stavom 0. V opakovaní, keď posledný príkaz podmienky zlyhá, slučka sa ukončí.
Používateľ môže 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
nerovná sa 10.
x=0 kým [[ $x -ne 10 ]] do 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
). Tu, keďže používame -ne
operátor (čo znamená „nerovná sa“), testovací príkaz vráti 0, t. j. úspech, ak hodnota x nie je 10, a vráti nenulovú hodnotu, t. j. zlyhanie, ak hodnota x je 10.
Potom vo vnútri urobiť...hotovo
bloku, vytlačíme hodnotu x a zvýšime ju. Keď je hodnota x 10, testovací príkaz vráti nenulový stav a slučka sa ukončí.
Poznámka: Premenná index, ktorá sa má použiť v slučke while, sa inicializuje buď pred slučkou while alebo v príkazoch podmienky, na rozdiel od cyklu 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 while echo "Zoznam súborov:" ls -l [[ $z -ne 5 ]] do echo "Vytvára sa dir$z..." mkdir dir$z ((z++)) hotovo
Prvé príkazy echo "Zoznam súborov:"
a ls -l
vykoná sa 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 hodnota z nie je 5, testovací príkaz vracia stav úspechu, a preto slučka beží ďalej. Príkazy podmienok a vykonané príkazy pokračujú v poradí. Tu pre každú iteráciu najprv spustí príkaz echo a príkaz ls v stave 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
pre podmienený výstup zo slučky.
x=0 kým [[ $x -ne 10 ]] urobiť, ak [[ $x -eq 5 ]] break fi echo $x ((x++)) hotovo
Vyššie uvedená slučka while 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
na preskočenie zostávajúcej časti iterácie v slučke, ak je splnená určitá podmienka.
x=0, kým [[ $x -ne 10 ]] urobiť, ak [[ $x -eq 5 ]] pokračovať 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 zatiaľ čo
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 zatiaľ čo
slučka, podobne ako pre
a kým
slučky sú dôležitou vlastnosťou skriptovania v Bash. Slučka While má podobné použitie ako slučka Until, okrem toho, že sa používa na spustenie alternatívnych príkazov/programov, keď je konkrétny program úspešný. Toto často nachádza svoju užitočnosť v pokročilých sieťových skriptoch, skriptoch údržby systému atď.