Feeds:
Articoli
Commenti

Posts Tagged ‘bash’

Ci eravamo lasciati con questo semplice script:


#!/bin/bash
 for name in $(ls *.txt)
 do
    without_txt=$(echo $name | cut -d'.' -f1)
    mv -f $name $without_txt.dat
 done

Capire cosa fa è il compito che vi avevo lasciato da svolgere sotto l’ombrellone. L’avevo chiamato “txt2dat.sh”, e 2 (“two” in inglese) si pronuncia come “to”. Ecco quindi la risposta. Lo script semplicemente converte i fle .txt della directory in files con estensione .dat Può essere utile fare questa conversione per esempio se si usa MATLAB, che interpreta automaticamente i file con estensione .dat come file di dati.

Nello script ci sono alcune cose interessanti, come il ciclo “for”, l’uso della pipe “|” per concatenare due comandi e l’uso del carattere $ per estrarre il valore di una variabile. Ma veniamo alla spiegazione riga per riga.

La direttiva:

#!/bin/bash

serve a segnalare che il contenuto del file deve essere interpretato con la bash shell (in ogni distribuzione Linux sono implementate diverse shells).

Il comando:

 for name in $(ls *.txt)

segna l’inizio del un ciclo for annidato tra i comandi “do” e “done”.

Il comando:

 without_txt=$(echo $name | cut -d'.' -f1)

definisce la variabile “without_txt”, ché è il nome del file privato dell’estensione .txt Per ottenerlo indirizziamo l’output del comando “echo $name”, che scrive il nome del file completo (esempio: “dati.txt”) all’input del comando “cut -d’.’ -f1” che ne restituisce la parte che sta prima del punto. Per provare che funziona, possiamo semplicemente inserire dal terminale un comando come questo:

giovanni@fz6:~> echo qui.quo | cut -d’.’ -f1
qui

Cosa fa il comando “cut” in questo caso è semplice, ma per saperne di più posso consultare la man page:
giovanni@fz6:~> man cut

Infine il comando:

 mv -f $name $without_txt.dat

aggiunge l’estensione .dat al nome del file file.

Infine notiamo che questo comando:

mv -f $name ${name%.txt}.dat

ha lo stesso effetto delle righe 4 e 5 (il segno % elimina il .txt dal nome del file), ma non avrei usato la pipe…

Read Full Post »