Programmare la shell Unix parte 3 : in questa lezione analizzeremo le strutture di controllo.
Le strutture di controllo servono a specificare se, quando, in quale ordine e quante volte devono essere eseguite le istruzioni. A differenza di molti linguaggi di programmazione, come il C o Java, negli script della shell Unix non si utilizzano le parentesi graffe { }
per individuare un blocco di codice ma si utilizzano parole chiave .
if
#!/bin/bash
n=3;
if [[ $n>0 ]]; then
echo "numero positivo";
fi
if… elif… else…
La parola chiave elif
è l’abbreviazione di else if
, il suo contenuto viene eseguito se la condizione dell’ if
precedente non restituiva true e quella invece al suo interno si. L’ultimo else
viene eseguito nel caso che tutte le condizioni precedenti siano false.
#!/bin/bash
n=-3;
if [[ $n > 0 ]]; then
echo "numero positivo";
elif [[ $n < 0 ]]; then
echo "numero negativo";
else
echo "numero non positivo e non negativo";
fi
case
#!/bin/bash
classe='Terza';
case $classe in
( Terza )
echo "Programmazione strutturata";;
( Quarta )
echo "Programmazione ad oggetti";;
( Quinta )
echo "Programmazione web";;
( * )
echo "Valore non presente";
esac
Nota che il secondo ;
nelle linee 5, 7 e 9 rappresenta la classica istruzione break
che impedisce ai case successivi di essere eseguiti ed ovviamente non va inserito nel case ( * )
che rappresenta il case di default
.
while
Il ciclo continua mentre la condizione è true
#!/bin/bash
i=1;
echo "I primi 10 numeri naturali";
while [ $i -le 10 ]; do
echo "$i";
((i++))
done
until
In questo caso il ciclo continua finché la condizione è true
#/bin/bash
i=10;
echo "Conteggio alla rovescia";
until [ $i -le 1 ]; do
echo $i;
((i--))
sleep 1
done
L’istruzione sleep 1
aspetterà un secondo
for
#/bin/bash
echo "Tabellina del numero 7";
n=7;
i=1;
for (( i=1;i<=10;i++ ))
do
((res=n*i))
echo $res;
done
Nota che le operazioni aritmetiche vengono fatte tra doppie parentesi tonde
for in
#/bin/bash
echo "Elenco di animali da file";
for animale in $( sort animali.txt )
do
echo $animale;
done
Ricorda che nella programmazione della shell UNIX è fondamentale rispettare gli spazi nelle varie strutture di controllo.