Progetto Bash. Istruzioni condizionali: IF – Elif

Finora abbiamo parlato del costrutto IF nella sua forma più semplice. Ma ci sono delle volte che bisogna costruire alcuni costrutti IF più avanzati sfruttando l’annidamento. Annidare un IF significa costruire un IF dentro un IF e dentro un’altro IF. In tutto questo ci viene incontro un secondo controllo, detto Elif, che prende il post dell’Else e che permette di controllare ulteriomente il valore.

Il classico costrutto dell’IF, come abbiamo visto nei precedenti post, è il seguente:

if [ espressione ]; then
   Se l'espressione è vera, eseguo dei comandi o visualizzo qualcosa
else
   Se l'espressione è falsa, eseguo altri comandi o visualizzo qualcosa
fi

Il costrutto di un IF annidato invece viene fatto in questo modo:

if [ espressione ]; then
   Se l'espressione è vera, eseguo dei comandi o visualizzo qualcosa
elif [ espressione ]; then
   Se la prima espressione è falsa, faccio un ulteriore controllo.
   Se il secondo controllo risulta vero, eseguo dei comani o visualizzo qualcosa.
else
   Se tutto è falso, eseguo dei comandi o visualizzo qualcosa.
fi

Come potete vedere i costrutti sono molto simili, ma con l’annidamento permette di effettuare N controlli. Dipende sempre da quanti IF annidati ci sono, ma questo dipende da ciò che voi state scrivendo ;) . Ma vediamo di fare qualche piccolo esempio:

#!/bin/bash

echo "Dammi un numero: "
read primo

echo "Dammi un secondo numero: "
read secondo

if [ $primo -gt $secondo ]; then
   if [ $(expr $primo % 2 ) -eq 0 ]; then
      echo "Il primo numero è pari."
      echo "Il primo numero è più grande del secondo."
   else
      echo "Il primo numero è dispari."
      echo "Il primo numero continua ad essere più grande del secondo."
   fi
elif [ $(expr $secondo % 2) -eq 0 ]; then
   echo "Il secondo numero è pari."
   echo "Il secondo numero è più grande del primo."
else
   echo "Il secondo numero è dispari."
   echo "Il secondo numero è più grande del primo."
fi

Come potete vedere dall’esempio ho utilizzato un costrutto di IF annidati. Può sembrare un casino ma non è così. ;) Ora vi spiego meglio che cosa fa tutto questo pezzo di codice. Lo script ci chiede due numeri dati da tastiera. Controlla se il primo numero è più grande del secondo. Se questa espressione risulta vera, allora controlla se il numero è pari. Un numero è pari quando il suo resto è uguale a zero (0). Se l’espressione è uguale a zero, allora il primo numero è pari se no è dispari. Ma ipotiziamo che il primo numero è più piccolo del secondo, lo script catapulterà il controllo su Elif che controllerà se il secondo numero è pari o dispari.

Su questo esempio però c’è un problema perché se i numeri inseriti da tastiera sono uguali, l’espressione del primo IF risulterebbe FALSA e quindi dovremmo mettere un secondo controllo. Ecco qui la versione modificata per prevenire questo tipo di errore:

#!/bin/bash

echo "Dammi un numero: "
read primo

echo "Dammi un secondo numero: "
read secondo

if [ $primo -gt $secondo ]; then
   if [ $(expr $primo % 2 ) -eq 0 ]; then
      echo "Il primo numero è pari."
      echo "Il primo numero è più grande del secondo."
   else
      echo "Il primo numero è dispari."
      echo "Il primo numero continua ad essere più grande del secondo."
   fi
elif [ $primo -eq $secondo ]; then
   echo "I numeri sono uguali."
   if [ $(expr $primo % 2) -eq 0 ]; then
      echo "Il primo numero è pari."
      echo "Il secondo numero è pari."
   else
      echo "Il primo numero è dispari."
      echo "Il secondo numero è dispari."
   fi
elif [ $(expr $secondo % 2) -eq 0 ]; then
   echo "Il secondo numero è pari."
   echo "Il secondo numero è più grande del primo."
else
   echo "Il secondo numero è dispari."
   echo "Il secondo numero è più grande del primo."
fi

Provate questi script per vedere meglio come funzionano. Creare IF annidati è molto semplice purtroppo è difficile scriverli leggibili agli altri programmatori ;) . Prima di chiudere il post do un piccolo consiglio per generare dei numeri casuali su Bash. Per generarli utilizzeremo la variabile $RANDOM. Il suo utilizzo è molto semplice, ecco qui :

casuale=$((RANDOM%10))

All’interno della variabile $casuale verrano generati dei numeri casuali che vanno da 0 a 9. In informatica il contatore parte sempre da 0. Se volete farlo partire da 1allora dovete scrivere così:

casuale=$((RANDOM%10+1))

Bene possiamo chiudere questo post con un piccolo gioco da fare a casa. Create il classico gioco “Carta – Forbice – Sasso”. Lo script vi chiederà di inserire da tastiera un numero, 2 = Forbice, 5 = Carta e 0 = Sasso. Il computer a sua volta sceglierà un suo numero per cercare di battervi. Vi ricordo le regole del gioco:

  • Carta batte Sasso
  • Sasso batte Forbice
  • Forbice batte Carta

Buona fortuna ;) . Spero tanto di trovare qualche commento sulla soluzione del gioco.

Ps.: Ecco la descrizione del gioco su Wikipedia -> http://it.wikipedia.org/wiki/Morra_cinese

Io e Bit3Lux

3 Thoughts on “Progetto Bash. Istruzioni condizionali: IF – Elif

  1. Pingback: Frattanto nella blogosfera #29 « Ok, panico

  2. Pingback: toshidex ~# » Blog Archive » [ Bash ] Morra Cinese aka Carta, Forbice e Sasso.

  3. Pingback: toshidex ~# » Blog Archive » Progetto Bash. Istruzioni condizionali: Case

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 

Post Navigation