Bucle FOR & instrucțiuni WHILE

Introducere în Bash Scripting

Alex Scriven

Data Scientist

Structura de bază a buclei FOR

Python:

for x in range(3):
    print(x)
0
1
2

R:

for (x in seq(3)){
    print(x)
}
[1] 1
[1] 2
[1] 3
Introducere în Bash Scripting

Bucla FOR în Bash

Structura de bază în Bash este similară:

for x in 1 2 3

do echo $x done
1
2
3
Introducere în Bash Scripting

Intervale numerice în bucla FOR

Bash oferă o modalitate simplă de a crea intervale numerice numită „expansiune cu acolade":

  • {START..STOP..INCREMENT}
for x in {1..5..2}

do echo $x done
1
3
5
Introducere în Bash Scripting

Sintaxa cu trei expresii în bucla FOR

O altă modalitate frecventă de a scrie bucle FOR este sintaxa „trei expresii".

  • Cele trei expresii sunt incluse în paranteze duble
  • Prima parte este expresia de start (x=2)
  • Partea din mijloc este condiția de terminare (x<=4)
  • Ultima parte este expresia de increment (sau decrement) (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Introducere în Bash Scripting

Expansiuni glob

Bash permite și expansiuni cu potrivire de șabloane într-un bucle for, folosind simbolul *, de exemplu pentru fișierele dintr-un director.

De exemplu, presupunem că există două documente text în folderul /books:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Introducere în Bash Scripting

Subshell revisitat

Îți amintești de subshell folosind notația $()?

Poți utiliza aceasta direct într-un bucle for!

Presupunem o structură de foldere astfel:

Structura directorului books

Introducere în Bash Scripting

Subshell în bucle FOR

Putem itera prin rezultatul unui apel subshell:

for book in $(ls books/ | grep -i 'air')

do echo $book done
AirportBook.txt
FairMarketBook.txt
Introducere în Bash Scripting

Sintaxa instrucțiunii WHILE

Similar cu un bucle FOR, dar se definește o condiție verificată la fiecare iterație.

Iterațiile continuă până când condiția nu mai este îndeplinită!

  • Se folosește cuvântul while în loc de for
  • Condiția se include în paranteze pătrate
    • Se folosesc aceleași opțiuni de comparare numerică din instrucțiunile IF (ex. -le)
  • Condițiile multiple pot fi înlănțuite sau folosite cu paranteze duble, ca la instrucțiunile IF, cu && (ȘI) sau || (SAU)
  • Asigurați-vă că există o modificare în cod care va declanșa oprirea (altfel poate apărea un bucle infinit!)
Introducere în Bash Scripting

Exemplu de instrucțiune WHILE

Iată un exemplu simplu:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Introducere în Bash Scripting

Atenție la bucla infinită

Atenție la bucla WHILE infinită, dacă condiția de oprire nu este niciodată îndeplinită.

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # don't increment x. It never reaches 3!
    # ((x+=1)) 
done

Aceasta va afișa 1 la infinit!

Introducere în Bash Scripting

Să exersăm!

Introducere în Bash Scripting

Preparing Video For Download...