Unix / Linux - Prendere decisioni nella shell

Ciao, futuri programmatori! Oggi esploreremo il mondo emozionante delle decisioni nello scripting della shell di Unix e Linux. Come il tuo amico insegnante di computer del quartiere, sono qui per guidarti in questo viaggio, passo dopo passo. Allora, prenditi la tua bevanda preferita, mettiti comodo e partiamo insieme in questa avventura!

Unix / Linux - Decision Making

Le istruzioni if...else

Immagina di trovarti a un bivio nel tuo codice e di dover prendere una decisione basata su determinate condizioni. Ecco dove le istruzioni if...else diventano utili. Sono come i semafori della programmazione, guidando il tuo codice lungo strade diverse a seconda che le condizioni siano vere o false.

Istruzione if di base

Iniziamo con la forma più semplice dell'istruzione if:

if [ condition ]
then
command1
command2
...
commandN
fi

Ecco un esempio del mondo reale:

#!/bin/bash
age=18

if [ $age -ge 18 ]
then
echo "Sei abbastanza grande per votare!"
fi

In questo esempio, stiamo controllando se la variabile age è maggiore o uguale a 18. Se lo è, verrà visualizzato il messaggio "Sei abbastanza grande per votare!".

Istruzione if...else

Ora, cosa fare se vogliamo fare qualcosa quando la condizione è falsa? Ecco dove entra in gioco la clausola else:

if [ condition ]
then
command1
command2
...
commandN
else
alternative_command1
alternative_command2
...
alternative_commandN
fi

Modifichiamo il nostro esempio del voto:

#!/bin/bash
age=16

if [ $age -ge 18 ]
then
echo "Sei abbastanza grande per votare!"
else
echo "Mi dispiace, sei troppo giovane per votare."
fi

Ora, se l'età è inferiore a 18, verrà visualizzato il messaggio "Mi dispiace, sei troppo giovane per votare."

Istruzione if...elif...else

A volte, la vita (e il codice) non è solo in bianco e nero. Spesso dobbiamo controllare più condizioni. Ecco dove entra in gioco la clausola elif (else if):

if [ condition1 ]
then
command1
elif [ condition2 ]
then
command2
else
alternative_command
fi

Creiamo un esempio più complesso:

#!/bin/bash
grade=75

if [ $grade -ge 90 ]
then
echo "A - Eccellente!"
elif [ $grade -ge 80 ]
then
echo "B - Buon lavoro!"
elif [ $grade -ge 70 ]
then
echo "C - Hai passato."
else
echo "F - Devi studiare di più."
fi

Questo script valuta il voto di uno studente e fornisce un feedback appropriato in base a diverse range di voti.

L'istruzione case...esac

Ora, immagina di essere a un buffet con molte opzioni di cibo. Questo è ciò che l'istruzione case...esac è nella programmazione. Permette di confrontare un valore con una lista di modelli ed eseguire comandi in base alla corrispondenza.

La sintassi di base è questa:

case expression in
pattern1)
command1
command2
...
commandN
;;
pattern2)
command1
command2
...
commandN
;;
*)
default_command
;;
esac

Ecco un esempio pratico:

#!/bin/bash
fruit="apple"

case $fruit in
"apple")
echo "È un frutto rosso delizioso!"
;;
"banana")
echo "È un frutto giallo curvo!"
;;
"orange")
echo "È un frutto agrumato succoso!"
;;
*)
echo "Non conosco questo frutto."
;;
esac

In questo esempio, stiamo confrontando il valore di fruit contro diversi modelli. Se corrisponde a "apple", verrà visualizzato il messaggio corrispondente. Se non corrisponde a nessuno dei modelli specificati, eseguirà il caso predefinito (*).

Pattern multipli

Puoi anche confrontare più modelli per lo stesso set di comandi:

#!/bin/bash
day=$(date +%A)

case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "È un giorno feriale. È giunto il momento di lavorare!"
;;
Saturday|Sunday)
echo "È il fine settimana. È giunto il momento di rilassarsi!"
;;
*)
echo "Su quale pianeta sei?"
;;
esac

Questo script controlla il giorno della settimana corrente e output se è un giorno feriale o fine settimana.

Confronto tra if...else e case...esac

Ora confrontiamo queste due strutture decisionali:

Caratteristica if...else case...esac
Complessità Può gestire condizioni complesse Migliore per il matching di valori semplici
Leggibilità Può diventare difficile da leggere con molte condizioni Più leggibile con molte condizioni
Prestazioni Leggermente più lento con molte condizioni Più veloce con molte condizioni
Flessibilità Può usare qualsiasi tipo di condizione Limitato al matching di modelli

Negli anni di insegnamento, ho scoperto che gli studenti spesso faticano a scegliere tra if...else e case...esac. Ecco una regola semplice: se stai confrontando una singola variabile contro molti valori possibili, case...esac è il tuo amico. Per tutto il resto, attieniti a if...else.

Ricorda, la programmazione è come cucinare. Queste strutture decisionali sono i tuoi ingredienti, e con la pratica, imparerai quando usarli per creare il perfetto piatto... voglio dire, script!

In conclusione, il processo decisionale è un aspetto cruciale dello scripting della shell. Permette ai tuoi script di adattarsi e rispondere a diverse situazioni, rendendoli più potenti e flessibili. Che tu stia usando if...else o case...esac, ora sei equipaggiato con gli strumenti per fare decisioni. Continua a praticare, e presto scriverai script che possono prendere decisioni più velocemente di quanto tu possa dire "sudo"!

Credits: Image by storyset