Siti, blog e web hosting gratis Crea sito web
Valid HTML 4.01 Transitional

Home INTRO Variabili Output Aritmetica Selezioni Ripetizioni Test Funzioni

 

Generalita' Comandi Programmazione Manuale Zenity Free Script

 

 

CSS Valido!

 

 

Informazioni   Corso Linux - Sezione Programmazione - Capitolo Ripetizioni

Che cosa sono le Strutture di Ripetizione?

Sono un blocco di comandi contenute tra "do" e "done" eseguite fin quando una certa condizione, racchiusa da parentesi quadre, e' vera oppure quando uno dei comandi genera un errore.
esempio:, che eseguiremo nel Terminale con il comando: bash /percorso_dove_lo_abbiamo_scaricato/ripetizioni.sh

somma=0
x=0
while [ $x -le 100 ]
do
let somma+=$x
let x+=1
done
echo $somma

che significa:
crea le variabili somma e x assegnandogli il valore 0
finche' e' vera la condizione in parentesi quadre [$x minore o uguale a 100], esegui le istruzioni contenute tra do e done, ossia addiziona al valore di somma quello della variabile $x ed incrementa il valore di x.
Quando la condizione e' vera, termina il ciclo e stampa sullo schermo il risultato di somma.


Possiamo ottenere lo stesso risultato utilizzando la struttura until, che differentemente da while, esegue la ripetizione dei comandi compresi tra do e done finche' la condizione si mantiene falsa.
esempio:

somma=0
x=0
until [ $x -gt 100 ]
do
let somma+=$x
let x+=1
done
echo $somma

dove until [ $x -gt 100 ] significa finche' il valore di $x e' maggiore di 100


Il ciclo for per ogni ELEMENTO presente in LISTA esegue i comandi compresi tra do e done con la sintassi:
for ELEMENTO in LISTA
do
istruzioni
done
esempio:

for file in $(ls); do
echo $file
done

dove il ciclo inizializza una nuova variabile $file (ELEMENTO), al primo elemento della LISTA $(ls) che e' ( ricordi? ) una command substitution e visualizza sullo schermo il nome del primo file ottenuto con il comando ls e cosi' via fin a quando non vengono esauriti gli elementi presenti nella lista dei file.
Altro esempio:

LISTA="pane;pasta;pomodori;olio;sale;pepe;vino"
OLD_IFS="$IFS"
export IFS=";"
for i in $LISTA; do
echo $i
done
export IFS="$OLD_IFS"

La lista di elementi e' composta da una serie di parole separate dal separatore spazio.
Poiche' la lista in esempio usa come separatore il ";", salviamo il separatore standard $IFS, che e' lo spazio, nella variabile OLD_IFS e gli assegnamo al separatore il ";" con l'istruzione export IFS=";" .
Con il ciclo for assegnamo alla variabile "i" il primo elemento contenuto in "$LISTA" e cosi' via finche' la lista si esaurisce.
A questo punto riportiamo il separatore standard al suo valore originale tramite l'istruzione export IFS="$OLD_IFS" ed il gioco e' fatto.

È possibile definire un separatore standard personalizzato (eventualmente costituito da più di un carattere), in modo da processare qualsiasi tipo di lista.
Ultimo esempio:

for i in $(seq 1 10); do
echo $i
done

Sfruttando l'utility seq otteniamo un ciclo for che itera le sue istruzioni; seq 1 10 restituisce una lista contenente i numeri da 1 a 10 .

 

Copyright ©2009 Ciro Nuzzo - proglinux.altervista.org