11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

dd<br />

Capitolo 12. Filtri, programmi e coman<strong>di</strong> esterni<br />

Purtroppo pathchk non restituisce un co<strong>di</strong>ce d’errore riconoscibile e quin<strong>di</strong> è praticamente inutile<br />

in uno script. Si prendano in considerazione, al suo posto, gli operatori <strong>di</strong> verifica <strong>di</strong> file.<br />

Questo è l’alquanto oscuro e molto temuto comando <strong>di</strong> “duplicazione dati”. Sebbene in origine<br />

fosse una utility per lo scambio <strong>di</strong> dati contenuti su nastri magnetici tra minicomputer UNIX e<br />

mainframe IBM, questo comando viene tuttora utilizzato. Il comando dd copia semplicemente un<br />

file (o lo st<strong>di</strong>n/stdout), ma con delle conversioni. Le conversioni possibili sono<br />

ASCII/EBCDIC, 12 maiuscolo/minuscolo, scambio <strong>di</strong> copie <strong>di</strong> byte tra input e output, e saltare e/o<br />

troncare la parte iniziale o quella finale <strong>di</strong> un file <strong>di</strong> input. dd --help elenca le conversioni e tutte<br />

le altre opzioni <strong>di</strong>sponibili per questa potente utility.<br />

# Convertire in lettere maiuscole il contenuto <strong>di</strong> un file:<br />

dd if=$nomefile conv=ucase > $nomefile.maiuscolo<br />

# lcase # Per la conversione in minuscolo<br />

Esempio 12-52. Uno script che copia sè stesso<br />

#!/bin/bash<br />

# self-copy.sh<br />

# Questo script copia se stesso.<br />

suffisso_file=copia<br />

dd if=$0 of=$0.$suffisso_file 2>/dev/null<br />

# Sopprime i messaggi <strong>di</strong> dd: ^^^^^^^^^^^<br />

exit $?<br />

Esempio 12-53. Esercitarsi con dd<br />

#!/bin/bash<br />

# exercising-dd.sh<br />

# Script <strong>di</strong> Stephane Chazelas.<br />

# Con qualche mo<strong>di</strong>fica eseguita dall’autore del libro.<br />

file_input=$0 # Questo script.<br />

file_output=log.txt<br />

n=3<br />

p=5<br />

dd if=$file_input of=$file_output bs=1 skip=$((n-1)) count=$((p-n+1)) 2> /dev/null<br />

# Toglie i caratteri da n a p dallo script.<br />

333

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!