Bash 'For' Loop: Návod a príklady

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ť pre slučka v Bash.

Úvod

Typický Bash skript obsahuje sériu príkazov, ktoré sa majú vykonať jeden po druhom. Premenné možno použiť na ukladanie reťazcov, celočíselných indexových hodnôt, výsledkov príkazu atď. Slučky sú potrebné, keď chce používateľ vykonať konkrétny príkaz viackrát. Používa sa najmä vtedy, keď je výstup jedného príkazu vo forme zoznamu a pri každom výsledku v zozname sa má spustiť druhý príkaz.

Všeobecná syntax

Všeobecná syntax pre pre slučka v Bash je:

pretože v do ... ... hotovo

Tu, je premenná Bash, ktorá musí byť platným názvom premennej shellu Linux, tj názov obsahuje kombináciu písmen (az, AZ), číslic (0-9) a podčiarkovníka ( _ ) a musí začínať písmenom alebo podčiarkovník.

The je buď vlastný rozsah celočíselných indexov, ktoré sa budú opakovať, alebo vlastný zoznam celých čísel alebo reťazcov. Môže obsahovať aj iný linuxový príkaz, avšak výstup takéhoto príkazu musí byť oddelený medzerami alebo znakmi nového riadku, teda analyzovateľný Bashom do zoznamu (Zoznam v Bash je v podstate kolekcia hodnôt oddelených medzerou alebo novým riadkom ).

Ktorýkoľvek príkaz (príkazy), ktorý sa má vykonať, musí byť umiestnený vo vnútri urobiť..hotovo blokovať.

Pozrime sa na niekoľko jednoduchých príkladov.

Slučovanie v rozsahu celočíselných hodnôt: Nasledujúci kód vytvára adresáre s názvom dir1, dir2, dir3 až do dir10.

for i in {1..10} do mkdir dir$i done

Slučka na zozname pevných hodnôt: Nasledujúci kód vytlačí každý reťazec alebo celé číslo v danom pevnom zozname.

pre ja v Ahoj 1 2 3 Čau! do echo $i hotovo

Slučovanie na výstupe príkazu: Nasledujúci kód zacyklí výstup z ls a vypíše názov každého súboru v danom formáte.

pre i v `ls` do echo "Názov súboru je $i" hotovo

Syntax založená na výrazoch

Syntax založená na výrazoch podobná programovaciemu jazyku C je tiež možná v Bash:

pre ((Výraz 1; Výraz 2; Výraz 3)) do ... ... hotovo

Tu, Výraz 1 je inicializácia indexovej premennej (premenných). Výraz 2 je stav, kedy sa musí slučka opustiť; táto podmienka sa kontroluje v každej iterácii. Výraz 3 určuje prírastok/zníženie/úpravu hodnoty indexovej premennej (premenných)

Nasledujúci príklad jednoducho vypíše hodnoty od 0 do 4:

for ((i=0;i<5;i++)) do echo $i done

Nasledujúci príklad vytvára nekonečnú slučku, pretože nie sú špecifikované žiadne výrazy:

pre (( ; ; )) urobte echo „Pre zastavenie stlačte Ctrl-C“ hotovo

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.

for ((i=0;i<10;i++)) urob if [[ $i -eq 5 ]] then break else echo $i; fi hotovo

Vyššie uvedená slučka vytlačí čísla od 0 do 4. Potom, keď je hodnota i 5, vypadne zo slučky. Toto sa používa najmä vtedy, keď sa má slučka opustiť, keď príkaz poskytuje špecifický výstup. Napríklad nasledujúci cyklus sa preruší, ak a keď nájde prázdny súbor.

pre súbor v `ls` urob flen=`wc -c $súbor` if [[ "$flen" = "0 $súbor" ]] potom echo "$súbor je prázdny" break else echo $flen fi hotovo 

Príkaz wc -c vypíše počet riadkov v súbore . Vytlačí ho vo formáte , napríklad, 10 test.txt. Opúšťame cyklus, keď je počet riadkov 0, t.j. prázdny súbor.

Ak chcete podmienečne preskočiť iteráciu, pokračujte vo vyhlásení

Podobne ako C a mnoho ďalších programovacích jazykov, bash má tiež a ďalej na preskočenie zostávajúcej časti iterácie v slučke, ak je splnená určitá podmienka.

for ((i=0;i<10;i++)) urob if [[ $i -eq 5 ]] potom pokračujte fi echo $i; hotový

Vyššie uvedený cyklus vytlačí čísla od 0 do 10, okrem 5, pretože počas iterácie i=5 existuje príkaz continue, ktorý preskočí zvyšok kódu v slučke na začiatku iterácie i=6.

V nasledujúcom príklade vytlačíme počet riadkov v súbore a konkrétnu iteráciu ďalej ak je to adresár a nie súbor.

pre súbor v `ls` urobte if [[ -d $file ]] potom pokračujte fi wc -c "$file" hotovo

[[ -d $file ]] skontroluje, či je súbor adresárom. Ak je, potom preskočíme na ďalší súbor, t. j. ďalšiu iteráciu. Ak to nie je adresár, vytlačíme počet riadkov v súbore pomocou wc príkaz, ako je uvedené vyššie.

Používanie slučiek: Skripty a príkazový riadok

Syntax cyklu je možné použiť priamo v prostredí Bash alebo zo súboru skriptu shellu. Raz pre 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 pre slučka v Bash je celkom jednoduchá funkcia, ale má svoje využitie v takmer každom druhu zložitého scenára skriptovania. Naučiť sa to ide dlho, či už ste bežný alebo pokročilý používateľ Linuxu, alebo sa začínate učiť automatizáciu úloh správy systému a DevOps.