Cicli FOR e istruzioni WHILE

Introduzione al Bash Scripting

Alex Scriven

Data Scientist

Struttura base di un ciclo 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
Introduzione al Bash Scripting

Ciclo FOR in Bash

La struttura di base in Bash è simile:

for x in 1 2 3

do echo $x done
1
2
3
Introduzione al Bash Scripting

Intervalli numerici in FOR

Bash ha un modo pratico per creare un intervallo numerico chiamato "brace expansion":

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

do echo $x done
1
3
5
Introduzione al Bash Scripting

Sintassi FOR a tre espressioni

Un altro modo comune di scrivere i FOR è la sintassi "a tre espressioni".

  • Racchiudi le tre espressioni tra doppie parentesi
  • La prima parte è l'inizializzazione (x=2)
  • La parte centrale è la condizione di termine (x<=4)
  • L'ultima è l'incremento (o decremento) (x+=2)

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Introduzione al Bash Scripting

Espansioni glob

Bash permette anche le espansioni con pattern in un ciclo for usando il simbolo *, ad esempio per i file in una directory.

Per esempio, supponi ci siano due documenti di testo nella cartella /books:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Introduzione al Bash Scripting

Shell-nella-shell, revisione

Ricordi come creare una shell nella shell con la notazione $()?

Puoi richiamarla direttamente in un ciclo for!

Supponiamo una struttura di cartelle così:

Struttura della directory books

Introduzione al Bash Scripting

Shell-nella-shell in un FOR

Possiamo ciclare sul risultato di una chiamata shell-nella-shell:

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

do echo $book done
AirportBook.txt
FairMarketBook.txt
Introduzione al Bash Scripting

Sintassi di WHILE

Simile a un ciclo FOR, ma imposti una condizione verificata a ogni iterazione.

Le iterazioni continuano finché la condizione è vera!

  • Usa la parola while invece di for
  • Metti la condizione tra parentesi quadre
    • Stesse flag di confronto numerico degli IF (es. -le)
  • Puoi concatenare più condizioni o usare le doppie parentesi come negli IF con && (AND) o || (OR)
  • Assicurati che nel codice ci sia un cambiamento che fermi il ciclo (altrimenti diventa infinito!)
Introduzione al Bash Scripting

Esempio di WHILE

Ecco un esempio semplice:

x=1

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

Attenzione al loop infinito

Attenzione al ciclo WHILE infinito, se la condizione di uscita non si verifica mai.

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # non incrementare x. Non arriverà mai a 3!
    # ((x+=1)) 
done

Questo stamperà 1 all'infinito!

Introduzione al Bash Scripting

Vamos praticar!

Introduzione al Bash Scripting

Preparing Video For Download...