logo

Bash Scripting – For Loop

Keďže BASH je jazyk príkazového riadka, získame pomerne bohaté skúsenosti s programovaním na vykonávanie úloh v termináli. Môžeme použiť slučky a podmienené príkazy v BASH skriptoch na vykonávanie niektorých opakujúcich sa a zložitých problémov jednoduchým programovým spôsobom. V tomto článku sa zameriame na pre slučku v skriptoch BASH.

V závislosti od prípadu použitia a problému, ktorý sa snaží automatizovať, existuje niekoľko spôsobov, ako použiť slučky.



pričom slučka java
  • Jednoduchá slučka For
  • Slučka for založená na rozsahu
  • Iterácia poľa pre cykly
  • C-štýl pre slučky
  • Nekonečná slučka for

Jednoduchá slučka For

Na vykonanie cyklu for môžeme napísať nasledujúcu syntax:

#!/bin/bash  for n in a b c; do  echo $n done>
  • V prvej iterácii,n>nadobudne hodnotu a a skript vypíše a.
  • V druhej iterácii,n>nadobudne hodnotu b a skript vypíše b.
  • V tretej iterácii,n>nadobudne hodnotu c a skript vypíše c.

501

Vyššie uvedený príkaz bude iterovať cez zadané prvky po v kľúčové slovo jeden po druhom. Prvky môžu byť čísla, reťazce alebo iné formy údajov.



Slučka for založená na rozsahu

Môžeme použiť slučky for založené na rozsahu. V tomto type cyklu môžeme zadať číslo, ktoré sa má spustiť, zastaviť a zvýšiť pri každej iterácii (voliteľné) v príkaze. Existujú dva spôsoby, ako to urobiť, t. j. uvedením hodnoty prírastku/zníženia hodnoty a predvolene zvýšením o jednu. Syntax vyzerá takto:

#!/bin/bash  for n in {1..5};  do  echo $n done>

500

Vo vyššie uvedenom kóde používame {} na určenie rozsahu čísel. Vo vnútri zložených zátvoriek určujeme počiatočný bod, za ktorým nasledujú dve bodky a koncový bod. Štandardne sa zvyšuje o jednu. Preto vytlačíme 5 čísel od 1 do 5 vrátane.



#!/bin/bash  for n in {1..5..2};  do  echo $n done>

502

Tu môžeme vidieť, že slučka sa zvýšila o 2 jednotky, ako je uvedené v zložených zátvorkách. Vďaka tomu je práca s číslami veľmi jednoduchá a pohodlná. Dá sa to použiť aj s abecednými znakmi.

POZNÁMKA: Nemôžeme použiť premenné v zložených zátvorkách, takže hodnoty budeme musieť napevno zakódovať. Ak chcete použiť premenné, v niekoľkých nasledujúcich častiach uvidíme tradičné cykly for v štýle C.

Iterácia poľa pre cykly

Pole môžeme pohodlne iterovať v bash pomocou slučiek for so špecifickou syntaxou. Na prístup ku všetkým prvkom v poli môžeme použiť špeciálne premenné v BASH, tj @. Pozrime sa na kód:

#!/bin/bash  s=('football' 'cricket' 'hockey')  for n in ${s[@]};  do  echo $n done>

503

np.klip

Prvky poľa môžeme iterovať pomocou operátora @, ktorý získa všetky prvky poľa. Takže pomocou cyklu for cez ne iterujeme jeden po druhom. Používame premennú ${názov_premennej[@]}, v ktorej zložené zátvorky rozširujú hodnotu premennej s tu, čo je pole reťazcov. Pomocou operátora [@] pristupujeme ku všetkým prvkom a teda ich iterujeme v slučke for. Tu, n je iterátor, preto môžeme hodnotu vytlačiť alebo na nej vykonať požadované spracovanie.

C-štýl pre slučky

Ako už bolo povedané, musíme použiť premenné vo vnútri cyklov for na iteráciu cez celý rad prvkov. A preto slučky for v štýle C hrajú veľmi dôležitú úlohu. Pozrime sa, ako ich používame.

#!/bin/bash  n=7 for (( i=1 ; i<=$n ; i++ ));  do  echo $i done>

504

Ako vidíme, môžeme dynamicky použiť hodnotu rozsahu koncových podmienok. Pamätajte, že medzery medzi dvojitými zátvorkami môžu byť zámerné a sú súčasťou syntaxe. Cykly for v štýle C sú slučky, ktoré majú 3 časti, inicializačný iterátor, inkrementátor/dekrement a koncovú podmienku.

Vo vyššie uvedenej syntaxi sme inicializovali iterátor/počítadlo slučky na 1, čo môže byť čokoľvek podľa výberu. Druhá časť je koncová podmienka, tu sme použili premennú n ktorý je inicializovaný pred cyklom for a teda používame jednoduchý $ operátor na získanie hodnoty premennej. Nakoniec máme inkrementor/dekrementátor, ktorý zmení iterátor/počítadlo na hodnotu, ktorá môže byť čokoľvek, ale v príklade sme použili unárny operátor (++) zvýšiť hodnotu o jednu, ktorá je ekvivalentná i=i+1 . Môžeme teda použiť výroky ako i+=2, i–,++i, a tak ďalej a tak ďalej.

Nekonečná slučka for

Nepoužívame to často, ale niekedy je užitočné, aby niektoré veci fungovali. Syntax je pomerne jednoduchá a podobná slučkám for v štýle C.

#!/bin/bash  n=4 for (( ; ; ));  do  if [ $n -eq 9 ];then  break  fi  echo $n  ((n=n+1)) done>

Slučka začína sn>nastavte na 4. Zvyšuje san>o 1 pri každej iterácii a vytlačí hodnotun>kýmn>sa stáva rovným 9. Kedyn>dosiahne 9,break>vykoná sa príkaz a cyklus sa ukončí. Po vytlačení čísel 4 až 8 sa skript zastaví.

505

Ako môžeme vidieť, cyklus „for“ nemá žiadne podmienky a toto sa cykluje navždy, ale máme vyhlásenie o stave, aby sme skontrolovali, že to nepokračuje navždy. Príkaz break používame vo vnútri príkazu if, aby sme sa dostali z cyklu a zastavili iteráciu s iterátorom. Použili sme inkrementor na zvýšenie premennej v slučke, inak je slučka nekonečná. Samozrejme, potrebujeme nejakú logiku, aby sme sa dostali zo slučky, a preto musíme použiť podmienený príkaz if.