La programmazione di script shell è come avere un assistente personale che non dorme mai, non si lamenta mai e esegue i tuoi comandi con precisione robotica. È l'arte di concatenare istruzioni da riga di comando per creare flussi di lavoro potenti e automatizzati.
Come può aiutarti la programmazione di script shell?
- Automatizzare compiti ripetitivi (perché la vita è troppo breve per ctrl+C, ctrl+V)
- Gestire i processi di sistema come un capo
- Creare operazioni riproducibili (così il tuo futuro te stesso non maledirà il tuo passato)
- Mostrare le tue abilità Linux e impressionare i tuoi colleghi
Prima di rimboccarci le maniche, chiariamo una cosa: stiamo parlando di Bash qui. Certo, ci sono altre shell come Zsh, Fish o il buon vecchio Sh, ma Bash è il ragazzo cool con cui tutti vogliono uscire nel parco giochi di Linux.
Il tuo primo incontro con la programmazione di script shell
Iniziamo con il classico "Ciao, Mondo!" perché, beh, è tradizione:
#!/bin/bash
echo "Ciao, Mondo! Sono uno script shell, piacere di conoscerti!"
Salva questo come ciao_mondo.sh
e analizziamolo:
#!/bin/bash
: Questo si chiama shebang. È come dire al computer, "Ehi, esegui questo con Bash, per favore!"echo
: Questo comando è come gridare nel vuoto, tranne che il vuoto è il tuo terminale.
Ora, rendiamolo eseguibile ed eseguiamolo:
chmod +x ciao_mondo.sh
./ciao_mondo.sh
Boom! Ora sei ufficialmente uno script shell. Mettilo nel tuo curriculum! 😄
Variabili: Il condimento della vita shell
Le variabili negli script shell sono come contenitori per le tue cose digitali. Giochiamo un po':
#!/bin/bash
# Assegna un valore a una variabile
saluto="Ciao, terrestre!"
# Usa la variabile
echo $saluto
# Ottieni input dall'utente
read -p "Come ti chiami? " nome
echo "Piacere di conoscerti, $nome!"
Consiglio da professionista: Quando usi le variabili, racchiudile tra parentesi graffe come ${variabile}
per evitare ambiguità. Il tuo futuro te stesso ti ringrazierà.
Strutture di controllo: Piegare la shell alla tua volontà
Ora, aggiungiamo un po' di logica ai nostri script. Inizieremo con la struttura if-then-else, il pane e burro delle decisioni:
#!/bin/bash
read -p "Inserisci un numero: " num
if [ $num -gt 10 ]; then
echo "È un numero grande!"
elif [ $num -eq 10 ]; then
echo "Hai centrato il punto giusto!"
else
echo "Pensa più in grande!"
fi
Ecco un ciclo per farti sentire come se fossi in The Matrix:
#!/bin/bash
for i in {1..5}
do
echo "Iterazione $i"
sleep 1 # Pausa per effetto drammatico
done
echo "Ciclo completato. Mente = Sconvolta."
Operazioni sui file: Perché i dati non si spostano da soli
Creiamo uno script che esegue il backup di un file e aggiunge un timestamp:
#!/bin/bash
# Controlla se è stato fornito un nome file
if [ $# -eq 0 ]; then
echo "Uso: $0 "
exit 1
fi
filename=$1
timestamp=$(date +"%Y%m%d_%H%M%S")
backup_file="${filename}_${timestamp}.bak"
# Controlla se il file esiste
if [ ! -f "$filename" ]; then
echo "Errore: File '$filename' non trovato."
exit 1
fi
# Crea il backup
cp "$filename" "$backup_file"
if [ $? -eq 0 ]; then
echo "Backup creato con successo: $backup_file"
else
echo "Errore: Backup fallito."
fi
Questo script introduce alcuni nuovi concetti:
$#
: Il numero di argomenti passati allo script$1
: Il primo argomento passato allo script$(command)
: Sostituzione di comando - esegue un comando e restituisce l'output$?
: Lo stato di uscita dell'ultimo comando (0 significa successo)
Gestione degli errori: Perché gli errori accadono
Aggiorniamo il nostro script con un po' di gestione degli errori:
#!/bin/bash
set -e # Esci immediatamente se un comando termina con uno stato diverso da zero
set -u # Tratta le variabili non impostate come un errore
log_error() {
echo "ERRORE: $1" >&2
}
backup_file() {
local filename=$1
local backup_dir="/tmp/backups"
# Crea la directory di backup se non esiste
mkdir -p "$backup_dir" || { log_error "Impossibile creare la directory di backup"; return 1; }
# Copia il file nella directory di backup
cp "$filename" "$backup_dir" || { log_error "Impossibile copiare il file"; return 1; }
echo "Backup di $filename creato in $backup_dir"
}
# Esecuzione principale dello script
main() {
if [ $# -eq 0 ]; then
log_error "Uso: $0 "
exit 1
fi
backup_file "$1"
}
main "$@"
Questo script introduce:
set -e
eset -u
per un controllo degli errori più rigoroso- Una funzione per la registrazione degli errori
- Una funzione principale per organizzare la logica dello script
Tecniche avanzate: Migliora il tuo gioco con la shell
Ora che abbiamo coperto le basi, diamo un'occhiata ad alcune tecniche più avanzate:
1. Uso degli array
#!/bin/bash
# Dichiarare un array
frutti=("mela" "banana" "ciliegia")
# Ciclo attraverso l'array
for frutto in "${frutti[@]}"
do
echo "Mi piace $frutto"
done
# Aggiungi un elemento all'array
frutti+=("dattero")
# Stampa l'intero array
echo "Tutti i frutti: ${frutti[*]}"
2. Funzione con valori di ritorno
#!/bin/bash
is_even() {
if [ $(($1 % 2)) -eq 0 ]; then
return 0 # Vero (in bash, 0 è vero)
else
return 1 # Falso
fi
}
numero=42
if is_even $numero; then
echo "$numero è pari"
else
echo "$numero è dispari"
fi
3. Lettura da un file
#!/bin/bash
filename="sample.txt"
while IFS= read -r line
do
echo "Linea: $line"
done < "$filename"
Best Practices: Non spararti sui piedi
- Usa sempre
set -e
eset -u
all'inizio dei tuoi script - Cita le tue variabili:
"$variabile"
invece di$variabile
- Usa variabili
local
nelle funzioni per evitare di inquinare lo spazio dei nomi globale - Commenta il tuo codice (il tuo futuro te stesso ti ringrazierà)
- Usa nomi significativi per variabili e funzioni
- Testa i tuoi script a fondo, specialmente i casi limite
Errori comuni: Impara dagli errori degli altri
- Dimenticare di rendere eseguibile il tuo script (
chmod +x script.sh
) - Usare
==
invece di=
per il confronto di stringhe nelle parentesitest
- Non gestire gli spazi nei nomi dei file (usa le virgolette!)
- Supporre che un comando sia riuscito senza controllare il suo stato di uscita
Conclusione: La shell e oltre
Congratulazioni! Hai fatto i tuoi primi passi nel potente mondo della programmazione di script shell. Con queste abilità, sei ben avviato per automatizzare compiti, gestire sistemi e diventare un ninja della riga di comando.
Ricorda, la programmazione di script shell è solo l'inizio. Man mano che diventi più a tuo agio, potresti voler esplorare:
- Elaborazione di testo più avanzata con
awk
esed
- Pianificare i tuoi script con
cron
- Controllare le versioni dei tuoi script con Git
- Integrare i tuoi script con altri strumenti e servizi
Continua a sperimentare, continua a imparare e, soprattutto, continua a scrivere script! La riga di comando è la tua ostrica e hai gli strumenti per aprirla.
"La differenza tra un buon amministratore e un grande amministratore è di circa 40 script shell." - Sconosciuto
Ora vai avanti e automatizza tutto! 🚀