mercoledì 2 novembre 2011

"Iteriamo" con while

Oggi ci occuperemo del costrutto While.

Esso può essere sintetizzato con una sola frase: "Fino a quando è vera la condizione, esegue (itera) le istruzioni contenute tra do e done."

Eccone la sintassi:

while [ condizione ]
do

 comando(i)...

done


Ovviamente può essere scritto anche su una sola riga:

while [ condizione ]; do istruzioni; done

Per puro stile, si scrive così:

while [ condizione ]; do
      istruzioni
done


Differisce dal ciclo for solo per il fatto che, qui, non si conoscono in anticipo il numero di iterazioni (ripetizioni).

Parlavamo di condizioni. Si, una condizione che deve essere verificata. E la verifica viene effettuata tramite il comando test. Ricordate, ne abbiamo parlato in abbondanza quando abbiamo affrontato il costrutto IF.

Facciamo qualche esempio.

Creiamo uno script che ci dovrà stampare a video la parola "ciao" ogni tre secondi.

#!/bin/bash

while [ true ]; do

      echo ciao

      sleep 3
done

exit 0 


Da questo script si esce premendo la combinazione ctrl + c

In pratica while verifica la condizione, vede che è vera ( true ) e inizia ad iterare (ripetere) "infinitamente" il comando posto tra do e done.

Ritorniamo alla definizione di While. "While esegue (itera) il/i comando/i tra do e done solo se l'espressione di controllo è vera." A questa definizione aggiungiamo che "While smette di iterare solo se l'espressione di controllo diventa falsa".

Per capire quest'altra affermazione, costruiamo un altro script

#!/bin/bash

a=1

while [ "$a" -le 10 ]; do

      echo $a

      a=$((a+1))
done

exit 0


Abbiamo assegnato alla variabile "$a" il valore 1; While verifica la condizione e arriva alla conclusione che è vera; infatti 1 è minore di 10.

Ricordate il parametro "-le"? Fino a quando la variabile $a è minore o uguale a "10" la condizione posta tra le parentesi quadre è vera; ragion per cui while inizia ad eseguire il comando posto tra do e done, che in questo caso è "echo."

Abbiamo aggiunto anche un altro comando "a=$((a+1))" che non fa altro che incrementare (accrescere) il valore della variabile "$a"; in altri termini, la variabile "$a" cresce, di volta in volta, di un'unità. Quando arriva a 11, va a falsare la condizione tra le parentesi quadre; infatti 11 non è più inferiore o uguale a 10; perciò l'iterazione del comando echo si interrompe e si esce dallo script.

facciamo un altro esempio

#!/bin/bash

while [ "$a" != "sera" ]; do

      echo "per terminare il ciclo digita la parola sera"

      read a
done

exit 0


In questo caso la variabile "$a" è vuota, la condizione posta tra le parentesi quadre è vera; infatti $a è diversa della stringa "sera", qualunque cosa essa sia; per terminare il ciclo e uscire dallo script, dobbiamo digitare la parola sera quando lo script ce lo chiede. La parola "sera" (che sarà il contenuto della variabile $a), in questo caso, è l'unica che può falsare la condizione tra le parentesi quadre.

Provate gli script e costruitene altri! Basta solo un pò di fantasia e il divertimento è assicurato :D


Io e Lightuono

PS. L'indice del "Progetto bash" (qui)

Nessun commento:

Posta un commento