CodeGym /Corsi /Docker SELF /Condizioni (`if`, `else`) e cicli (`for`, `while`) in bas...

Condizioni (`if`, `else`) e cicli (`for`, `while`) in bash

Docker SELF
Livello 3 , Lezione 4
Disponibile

1. Condizioni in bash: if, else, e un po' di magia

Perché servono le condizioni?

Le condizioni permettono al tuo script di prendere decisioni basate sui dati in ingresso, sulle variabili o persino sui risultati dei comandi eseguiti. Ad esempio, vuoi controllare se un file esiste o assicurarti che un server sia accessibile prima di procedere. Ed è qui che entra in gioco la struttura if.

Sintassi di base

Ecco come appare una classica condizione if in bash:

if [ condizione ]; then
    # Qui viene eseguito il codice se la condizione è vera
    echo "Condizione soddisfatta!"
else
    # Qui viene eseguito il codice se la condizione è falsa
    echo "Condizione non soddisfatta!"
fi

Parole chiave:

  • if, then, else, e fi (la chiusura del blocco if) sono parole magiche. Senza di esse lo script non funzionerà.
  • Le parentesi quadrate [ ... ] sono usate per verificare le condizioni.

Esempio 1: Controllo dell'esistenza di un file

#!/bin/bash

FILE="/etc/passwd"

if [ -f $FILE ]; then
    echo "Il file $FILE esiste."
else
    echo "Il file $FILE non trovato."
fi

Spiegazione:

  • -f controlla se un file esiste.
  • Se il file esiste, il comando echo stampa un messaggio che conferma. Altrimenti, viene eseguito il blocco else.

Condizioni con comandi

Puoi usare il risultato dell'esecuzione di un comando come condizione, perché su Linux tutto è un comando.

Esempio 2: Controllo dell'accessibilità di un sito

#!/bin/bash

if ping -c 1 example.com &> /dev/null; then
    echo "Il sito è accessibile."
else
    echo "Il sito non è accessibile."
fi

Spiegazione:

  • ping -c 1 invia una richiesta al server. Se risponde, la condizione risulta vera.
  • &> /dev/null nasconde l'output del comando per non riempire il terminale di informazioni.

Uso dell'operatore elif

A volte if e else non bastano. Devi considerare più condizioni. E qui entra in gioco elif.

Esempio 3: Determinazione dell'orario del giorno

#!/bin/bash

HOUR=$(date +%H)

if [ $HOUR -lt 12 ]; then
    echo "Buongiorno!"
elif [ $HOUR -lt 18 ]; then
    echo "Buon pomeriggio!"
else
    echo "Buonasera!"
fi

Spiegazione:

  • date +%H restituisce l'ora corrente in formato 24 ore.
  • Confrontiamo l'ora corrente con dei valori fissi: meno di 12 — mattina, meno di 18 — pomeriggio, altrimenti — sera.

2. Cicli in bash: ripetizione — madre dell'apprendimento

I cicli sono un modo per far ripetere al tuo script certe azioni fintanto che una certa condizione è soddisfatta. Questo è particolarmente utile se devi processare molti file, ripetere un compito più volte o aspettare un certo evento.

Ciclo for

for scorre una lista di valori (ad esempio, file o numeri) ed esegue un'azione specifica per ciascuno di essi.

Esempio 4: Semplice ciclo for

#!/bin/bash

for i in {1..5}; do
    echo "Questa è l'iterazione numero $i"
done

Spiegazione:

  • {1..5} — una lista di numeri da 1 a 5.
  • Ad ogni iterazione, la variabile i assume un valore dalla lista.

Esempio 5: Iterare attraverso file in una directory

#!/bin/bash

for FILE in /etc/*; do
    echo "Elaborazione file: $FILE"
done

Spiegazione:

  • /etc/* — questa è una lista di tutti i file nella cartella /etc.
  • Ad ogni iterazione, la variabile FILE contiene il nome di un file.

Ciclo while

while esegue azioni fintanto che una condizione è soddisfatta.

Esempio 6: Indovina il numero

#!/bin/bash

SECRET=5
GUESS=0

while [ $GUESS -ne $SECRET ]; do
    echo "Inserisci il tuo indovinello (numero da 1 a 10):"
    read GUESS
done

echo "Hai indovinato!"

Spiegazione:

  • [ $GUESS -ne $SECRET ] — la condizione continua fintanto che il numero inserito GUESS non è uguale al numero segreto SECRET.

Combinare cicli e condizioni

A volte, condizioni e cicli lavorano insieme.

Esempio 7: Controllare diversi siti

#!/bin/bash

SITES=("example.com" "google.com" "nonexistent.website")

for SITE in ${SITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$SITE è raggiungibile."
    else
        echo "$SITE non è raggiungibile."
    fi
done

Spiegazione:

  • L'array SITES contiene una lista di siti.
  • for scorre ogni sito dall'array.
  • if verifica se un sito è raggiungibile usando ping.

3. Esercizi pratici

Verifica del dominio

Scrivi uno script che accetta un nome di dominio come argomento e ne controlla la disponibilità.

Suggerimento:

if ping -c 1 $1 &> /dev/null; then
    echo "Dominio disponibile."
else
    echo "Dominio non disponibile."
fi

Gestione dei file

Scrivi uno script che controlla l'esistenza di più file e stampa il risultato per ciascuno di essi.

Suggerimento:

FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
    if [ -f $FILE ]; then
        echo "$FILE esiste."
    else
        echo "$FILE non trovato."
    fi
done

Tabella di moltiplicazione

Scrivi uno script con cicli nidificati che stampa la tabella di moltiplicazione per i numeri da 1 a 10.

Suggerimento:

for i in {1..10}; do
    for j in {1..10}; do
        echo -n "$((i * j)) "
    done
    echo ""
done

Ora puoi aggiungere intelligenza e logica ai tuoi script bash. Le condizioni ti permetteranno di verificare gli stati e prendere decisioni, mentre i cicli ti aiuteranno ad automatizzare i compiti ripetitivi. Tante altre possibilità di automazione ti aspettano!

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION