20 BASH – Manipolazione files di testo

4 Marzo, 2024 (15:50) | BASH, Linux | By: sargonsei

20 BASH – Manipolazione files di testo

20.1 Script BASH – Scrivere l’output in un file di testo
L’output di un comando BASH è di due tipi: Output standard (canale 1) che contiene esclusivamente l’effetto del comando, ed Errore standard (canale 2) che contiene esclusivamente messaggi di errore ed avvisi vari che accompagnano l’esecuzione del comando stesso. Di default, l’output del canale 1 può essere reindirizzato verso un file di testo frapponendo l’operatore [>] (senza parentesi quadre) fra il comando BASH ed il nome del file di testo che si desidera che contenga l’output del comando stesso; l’output del canale 2 (Error standard) viene indirizzato sul terminale a prescindere di dove sia stato reindirizzato l’output del canale 1 (Output standard). Per far confluire in un file di testo avvisi e messaggi di errore che, di default, verrebbero visualizzati sul canale 2, non basta reindirizzare l’output del canale 1 verso un file di testo, ma occorre altresì indirizzare l’output del canale 2 verso il canale 1; questo effetto si ottiene ponendo l’operatore [2>&1] (senza parentesi quadre) in coda al comando suddetto.
#!/bin/bash
# Per eseguire lo script digitare ./ seguito dal nome dello script, Poi digitare [invio]
echo "Prima riga" > testo.txt # Crea il file di testo 'testo.txt' contenente "Prima riga".
# ^ Se 'testo.txt' esiste già, verrà sovrascritto. ^
echo "Riga seguente" >> testo.txt # Aggiunge la riga "Riga seguente" in coda al file di testo 'testo.txt'.
# ^ Se 'testo.txt' non esiste, verrà creato. ^

20.2 BASH – Script che accetta input da tastiera e scrive l’output in un file di testo
Questo script chiede all’utente di digitare il nominativo ed i dati corrispondenti al nominativo, li mostra all’utente, chiede se li si vuol conservare e, in caso affermativo, li salva all’interno di un file di testo.

#!/bin/bash
: || { Accetta dati da mettere in un elenco
 Per avviare questo script BASH chiamato [creaElenco.txt]
 aprire un terminale nella cartella in cui si trova questo script
 ed impartire il comando
 ./creaElenco.txt
}
Acquisire () # Inizio funzione acquisizione dati da tastiera
{ echo "Inserimento dati. Ad ogni richiesta, digitare la risposta e premere il tasto [Invio]."
    read -p "Nome? " A1
    read -p "Cognome? " A2
    read -p "Indirizzo residenza? " A3
    read -p "Indirizzo post@elettronica? " A4
    read -p "Numero di telefono? " A5
    A0="$A1 § $A2 § $A3 § $A4 § $A5"
} # Questa è l'ultima riga in cui si dichiara la funzione Acquisire
echo "Questa applicazione chiede nome, cognome, indirizzo, mail, e numero di telefono di persone da inserire in una lista"
let E1=1; echo "Cosa vuoi fare?"
while [ $E1 == 1 ]; do # Inizio istruzioni che verranno eseguite finché la condizione E1=1 è vera
    echo "[1] Inserire un nominativo."
    echo "[Qualsiasi altro tasto] Chiudere questa applicazione."
    read -s -n1 -p "Premi il tasto corrispondente." E1 # Acquisisce scelta dell'utente.
    echo
    if [ "$E1" == "" ]; then # Cosa fare qualora la variabile E1 sia vuota
        let E1=0
        # echo "La variabile E1 era vuota; è stata posta pari a 0"
    fi
    if [ $E1 == 1 ]; then # Cosa fare qualora E1=1
        Acquisire # Comando per far eseguire la funzione Acquisire
        echo "Verifica la correttezza dei dati"
        echo $A0
        read -s -n1 -p "Se vuoi salvarli, premi il tasto [1], altrimenti premi qualsiasi altro tasto." E2
        echo; E0="NON è "
        if [ "$E2" == "" ]; then let E2=0; fi # Se variabile E2 è vuota viene posta pari a 0
        if [ "$E2" == 1 ]; then
            echo $A0 >> elenco.txt # Inserisce i dati nel file di testo [elenco.txt]
            E0="È "
        fi
        echo $E0"stata aggiunta al testo del file [elenco.txt]."
        echo "Ed ora cosa vuoi fare?"
    fi
done
exit 0