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.