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!
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