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, efi(la chiusura del bloccoif) 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:
-fcontrolla se un file esiste.- Se il file esiste, il comando
echostampa un messaggio che conferma. Altrimenti, viene eseguito il bloccoelse.
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 1invia una richiesta al server. Se risponde, la condizione risulta vera.&> /dev/nullnasconde 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 +%Hrestituisce 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
iassume 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
FILEcontiene 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 inseritoGUESSnon è uguale al numero segretoSECRET.
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
SITEScontiene una lista di siti. forscorre ogni sito dall'array.ifverifica se un sito è raggiungibile usandoping.
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!
GO TO FULL VERSION