Predstavte si, že máte adresár naplnený tisíckami súborov a boli ste požiadaní o spracovanie týchto súborov jeden po druhom. Znie to dosť zdĺhavo, však? No nie, ak používate slučky For v skripte Bash. Slučka For v bash skripte je magický nástroj, ktorý vám môže pomôcť zautomatizovať akúkoľvek opakujúcu sa úlohu a zároveň efektívne narábať s týmito súbormi bez toho, aby ste sa museli zapotiť. V tomto článku diskutujeme o tom, čo sú slučky for bash, s niekoľkými praktickými príkladmi, vďaka ktorým bude automatizácia hračkou.
Obsah
What is For Loop v Bash Scripte
Slučka For je riadiaca štruktúra, ktorá sa používa na vykonávanie opakujúcich sa úloh alebo na vykonávanie množstva príkazov v určitom počte opakovaní. Pomocou cyklu for môžete prechádzať číslami, zoznamami, súbormi alebo dokonca adresármi.
Bash For Loop: Syntax štýlu POSIX
Syntax štýlu POSIX (Portable Operating System Interface) možno použiť s shellmi kompatibilnými s POSIX ako bash a dá sa použiť na iteráciu zoznamu súborov, ľubovoľnej sekvencie alebo dokonca výstupu iných príkazy. Tu je syntax cyklu for v skripte bash:
for in
do
done.
Vo vyššie uvedenej syntaxi všetko znamená:
- je používateľom definovaná premenná, ktorá obsahuje každú položku z
. - odkazuje na zoznam položiek, cez ktoré je potrebný cyklus for na iteráciu. Môže to byť zoznam čísel, reťazcov, výstup príkazu atď.
- kľúčové slovo do označuje začiatok cyklu for.
- obsahuje príkazy alebo príkazy, ktoré sa vykonajú pre každú iteráciu.
- Kľúčové slovo done znamená koniec cyklu for.
Pozrime sa teraz na niekoľko praktických príkladov založených na POSIX štýle for loop:
Príklad 1: Slučka cez daný rozsah
#!/bin/bash # Print numbers from 1 to 5. for i in $(seq 1 5); do echo $i. done
![pomocou bash skriptu vytlačíte všetky celé čísla od 1 do 5](/f/d6a122240f76f65e9a6d6b49328bd022.png)
Vo vyššie uvedenom úryvku sa časť $(seq 1 5) používa na vygenerovanie zoznamu celých čísel od 1 do 5. Potom bude prechádzať zoznamom jeden po druhom a potom sa každá hodnota vytlačí na nový riadok.
![tlač celých čísel od 1 do 5](/f/12566146e8397d7bd69ab54f26a1d1db.png)
Príklad 2: Slučka cez pole
#!/bin/bash fruits=("Apple" "Banana" "Orange" "Grapes") for fruit in "${fruits[@]}"; do echo "Fruit: $fruit"
done
![bash skript na vytlačenie názvov ovocia v poli so slučkou for](/f/490a2b7493143fade673de364c335d47.png)
Pole je dátová štruktúra, ktorá sa používa na to, aby obsahovala viacero údajov rôznych typov. Vo vyššie uvedenom úryvku:
- Čiara
fruits=("Apple" "Banana" "Orange" "Grapes")
sa používa na deklarovanie poľa obsahujúceho štyri rôzne názvy ovocia. - Čiara "
for fruit in "${fruits[@]}"; do
” nastaví For Loop. Špecifikuje premennú „ovocie“ na uchovávanie aktuálnej hodnoty prvku a „${fruits[@]}
” ako pole, ktoré sa má iterovať. "@
“, v rámci “${fruits[@]}
“, predstavuje všetky prvky poľa. - Čiara "
echo "Fruit: $fruit"
” vytlačí názov každého ovocia na nový riadok spolu so slovom „Ovocie“ počas každej iterácie. - Nakoniec posledný riadok „hotovo“ znamená koniec cyklu for.
Tu je výstup, ktorý získame z vyššie uvedených príkazov:
![tlač všetkých názvov ovocia v poli](/f/cff51e8f3e1cb957c2beb514ae6e7d26.png)
Príklad 3: Slučka so substitúciou príkazov
#!/bin/bash. for file in $(ls); do echo "File: $file"
done
![pomocou substitúcie príkazov na tlač všetkých názvov súborov v adresári](/f/3aae7daaa3fdfed48bad6d80a464cd15.png)
Spôsob, akým náhrada príkazov funguje, je, že príkaz sa najskôr vykoná a potom cyklus for iteruje celým výstupom príkazu. Príkaz, ktorý sa má opakovať, je umiestnený vo vnútri „$()
“. Vo vyššie uvedenom úryvku:
- V rade
for file in $(ls); do
,$(ls)
časť potom vykoná príkaz „ls“ a jeho výstup (zoznam súborov v aktuálnom adresári) sa použije ako vstup pre cyklus. Cyklus bude iterovať cez každý názov súboru nájdený vo výstupe. - Čiara
echo "File: $file"
vypíše hodnotu premennej „file“ spolu s predponou „File: “ počas každej iterácie. Premenná „file“ obsahuje názov aktuálneho súboru spracovávaného v slučke. - Nakoniec posledný riadok „hotovo“ znamená koniec cyklu for.
Výstup pre cyklus for so substitúciou príkazov, ako je ukázané vo vyššie uvedenom príklade, by bol:
![tlač všetkých názvov súborov pomocou bash skriptu](/f/0c6ecea14ec619bd3df70075d15d29b1.png)
Bash For Loop: Syntax štýlu C
Syntax štýlu C vyhovuje používateľom, ktorí sú viac zvyknutí na syntax cyklu for v iných jazykoch, ako sú C, C++, Java, JavaScript atď. Tu je základná syntax cyklu pre štýl C:
for ((; ; ))
do
done
Vo vyššie uvedenej syntaxi:
- odkazuje na počiatočnú hodnotu, od ktorej bude premenná cyklu začínať.
- definuje podmienku, od ktorej bude závisieť výstup; táto podmienka sa kontroluje v každej iterácii.
- odkazuje na hodnotu, o ktorú sa musí premenná cyklu aktualizovať.
odkazuje na príkazy alebo príkazy, ktoré je potrebné vykonať pre každú iteráciu.
Pozrime sa teraz na niekoľko praktických príkladov založených na slučke C štýlu:
Príklad 1: Vytlačte nepárne čísla od 1 do 10
!#/bin/bash for((i = 1; i <= 10; i = i + 1))
do if (( i % 2 == 1 )) then echo "Odd Number: $i" fi. done
![pomocou syntaxe štýlu c pre slučku v bash na tlač nepárnych čísel od 1 do 10](/f/3e32c24d9c394f9123b52b4ccf142c6c.png)
Vo vyššie uvedenom úryvku:
- Čiara
for((i = 1; i <= 10; i = i + 1))
inicializuje premennú cyklu na 1, skontroluje, či „hodnota i je menšia alebo rovná 10“ pre každý iteráciu a nakoniec zvyšuje hodnotu i pridaním 1 k aktuálnej hodnote po každom iteráciu. - if (( i % 2 == 1 )) skontroluje, či sa zostatková hodnota pri delení aktuálnej hodnoty i 2 rovná 1 alebo nie –
- ak je deliteľné, vykoná sa odozva riadku „Nepárne číslo: $i“ a vytlačí sa hodnota i.
- riadok fi označuje koniec podmienky if.
- Nakoniec posledný riadok ohraničuje koniec cyklu for a vykoná sa na konci.
Tu je výstup, ktorý získate pre vyššie uvedený kód:
![tlač nepárnych čísel od 1 do 10](/f/e349f8452455218a4f502178201faaa5.png)
Príklad 2: Slučka cez pole
#!/bin/bash fruits=("Apple" "Banana" "Orange" "Grapes")
for ((i = 0; i < ${#fruits[@]}; i++)); do echo "Fruit $((i+1)): ${fruits[i]}"
done
![bash skript so slučkou for na tlač všetkých prvkov v poli](/f/7e72cf22cea39554744d54a79f5b4302.png)
Vo vyššie uvedenom kóde:
- fruit=(“Jablko” “Banán” “Pomaranč” “Hrozno”) vytvorí pole názvov všetkých druhov ovocia.
- pre ((i = 0; i < ${#ovocie[@]}; i++)) najprv inicializuje premennú cyklu „i“ na 0, ktorá bude fungovať aj ako indexová premenná pre pole, a slučka pokračuje, pokiaľ je „i“ menšie ako počet prvkov v poli „ovocie“ (označené ako ${#fruits[@]}). Cyklus zvyšuje „i“ o 1 v každej iterácii.
- Keďže indexy poľa začínajú od 0, ale my ich chceme zobraziť ako začínajúce od 1, riadok echo „Ovocie $((i+1)): ${ovocie[i]}“ vypíše hodnotu, ktorá sa rovná aktuálnemu indexu “ i" plus 1.
- Nakoniec posledný riadok znamená koniec cyklu for
Tu je výstup vyššie uvedeného cyklu for:
![tlač hodnôt v poli](/f/4f3a6e266b1dc7f7ebd8b13d53caf754.png)
Odporúčané články
![ako používať príkaz grep v linuxe](/f/45327faa5ea8e3cdf4ad663b5728c425.jpg)
![Ako nastaviť Linux Bash Shell v systéme Windows 10](/f/dad0a907fb3aacf04f7d24b5915282f3.jpg)