Esercizio guidato Bash

Da file CSV a pagine HTML automatiche

Utilizzo di curl, wc, cut, cicli for e sed
Bash File CSV Automazione HTML
Glossario Comandi Linux e proprietà Utilizza questa guida per comprendere meglio i comandi Linux.
Obiettivo dell’esercizio

L’obiettivo di questa esercitazione è imparare a gestire dati strutturati tramite Bash, automatizzando la creazione di pagine HTML a partire da un file CSV.

Lo studente dovrà utilizzare variabili, cicli e comandi di manipolazione del testo, senza ricorrere a linguaggi esterni.

Download e varianti dello script

Scarica i file necessari e scegli la variante che preferisci. Entrambe le varianti generano pagine HTML a partire da rubrica.csv.

Esecuzione consigliata:

# Rendi eseguibile e avvia (consigliato)
chmod +x script.sh
./script.sh

# In alternativa (nessun chmod richiesto):
bash script.sh
                                        

Script (esempio):

righe=$(wc -l < rubrica.csv)
echo "Righe trovate: $righe"

for i in $(seq 2 "$righe"); 
do
    riga=$(head -n "$i" rubrica.csv | tail -n 1);
    nome=$(echo "$riga" | cut -d";" -f1);
    cognome=$(echo "$riga" | cut -d";" -f2);
    numero=$(echo "$riga" | cut -d";" -f3);
    indirizzo=$(echo "$riga" | cut -d";" -f4 | tr '"' ' ');
    cap=$(echo "$riga" | cut -d";" -f5 | tr -d '"');

    file="${nome}_${cognome}.html";

    echo "<!DOCTYPE html>" > "$file";
    echo "<html lang=\"it\">" >> "$file";
    echo "<head>" >> "$file";
    echo "  <meta charset=\"UTF-8\">" >> "$file";
    echo "  <title>$nome $cognome</title>" >> "$file";
    echo "</head>" >> "$file";
    echo "<body>" >> "$file";
    echo "  <h1>Dettagli di $nome $cognome</h1>" >> "$file";
    echo "  <p>Numero: $numero</p>" >> "$file";
    echo "  <p>Indirizzo: $indirizzo</p>" >> "$file";
    echo "  <p>CAP: $cap</p>" >> "$file";
    echo "</body>" >> "$file";
    echo "</html>" >> "$file";
done                                       
Modifica dei file HTML con sed e find

Inseriamo automaticamente il DOCTYPE all’inizio di ogni file HTML:

for file in $(find . -type f -name "*.html")
do
  sed -i '1i<!DOCTYPE html>' "$file"
done
                

Inseriamo poi il tag meta charset subito dopo il tag <head>:

for file in $(find . -type f -name "*.html")
do
  sed -i '/<head>/a\  <meta charset="UTF-8">' "$file"
done
                
Riepilogo rapido
  • Scaricare file da Internet con curl
  • Analizzare CSV con cat, column, wc
  • Utilizzare variabili e cicli for
  • Generare file HTML automaticamente
  • Modificare file in-place con sed