Lezione 14: Condizioni e controllo di flusso in Bash: if e case 🎯

Obiettivi didattici

All’interno di questa lezione approfondiremo:

  • L’uso delle strutture condizionali if, else, elif.
  • Il costrutto case per gestire più opzioni.
  • Applicazione pratica dei controlli logici negli script Bash.

📋 Indice della lezione

  1. Introduzione
  2. Sintassi e regole di if-else in Bash
  3. Il costrutto case per molteplici condizioni
  4. Esempi pratici
  5. Esercizio finale
  6. Quiz a scelta multipla
  7. FAQ
  8. Checklist

1. Introduzione

Le condizioni e il controllo di flusso sono fondamentali in Bash: permettono allo script di “decidere” cosa eseguire in base a una situazione. In questa lezione vedremo come usare if, elif, else e case per programmare flussi logici dinamici.


2. if, elif, else

🪛 Sintassi base

if [ condizione ]; then
  comandi
elif [ altra_condizione ]; then
  altri_comandi
else
  comandi_predefiniti
fi

📄 Note:

  • Le parentesi [ … ] richiedono spazi esterni.
  • Usare -f, -d, -z, -n, =, -eq, etc. per valutazioni.
  • Stringhe con doppie virgolette per sicurezza.

Esempio: controllo di esistenza

if [ -f /etc/passwd ]; then
  echo "Esiste"
else
  echo "Non esiste"
fi

3. Costrutto case

Il comando case è utile quando una variabile può assumere più valori diversi:

case $variabile in
  valore1)
    comandi1;;
  valore2|valore3)
    comandi2;;
  *)
    comandi_default;;
esac

🔧 Vantaggi:

  • Codice più leggibile rispetto a molteplici elif.
  • Ideale per selezionare tra scelte fisse.
  • Come approfondito nella guida “Switch (programmazione)” su Wikipedia (it.wikipedia.org).

4. Esempi pratici

Esempio 1: if con input utente

#!/bin/bash
echo "Inserisci un numero:"
read num

if [ "$num" -gt 0 ]; then
  echo "Numero positivo"
elif [ "$num" -lt 0 ]; then
  echo "Numero negativo"
else
  echo "Zero"
fi

Esempio 2: case con scelta testuale

#!/bin/bash
echo "Scegli un'opzione (start|stop|status):"
read cmd

case "$cmd" in
  start) echo "Avvio servizio";;
  stop) echo "Arresto servizio";;
  status) echo "Stato servizio";;
  *) echo "Comando sconosciuto";;
esac

5. Esercizio finale

Crea uno script giorno.sh che:

  1. Chiede all’utente il nome del giorno della settimana.
  2. Usa case per rispondere “giorno lavorativo” o “weekend”.
  3. Implementa un controllo con if se l’input è vuoto o non valido.
  4. 🔷 Lezione 14 completata

6. Quiz a scelta multipla

  1. Quale costrutto gestisce più opzioni senza usare elif?
    • A) if
    • B) case ✅
  2. Come si chiude un blocco if in Bash?
    • A) end
    • B) fi ✅
  3. Quale operatore verifica l’uguaglianza tra stringhe?
    • A) -eq
    • B) = ✅

7. FAQ

Q1: [ ... ] e [[ ... ]]: differenze?

A: [[ supporta pattern e regex, è più sicuro. [ ... ] è standard POSIX.

Q2: Posso usare case per confronto numerico?

A: No, case funziona solo su stringhe. Usa if + -eq, -gt, ecc.

Q3: Serve il ;; dopo ogni blocco case?

A: Sì, serve a terminare il blocco di comandi per quel case.


Link interno suggerito: Guida a script Bash base su saperesemplice.com

Link esterno autorevole: Documentazione ufficiale GNU Bash – Conditional Expressions

Lascia un commento