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.

Cautela<br />

Capitolo 14. Sostituzione <strong>di</strong> comando<br />

Non si imposti una variabile con il contenuto <strong>di</strong> un file <strong>di</strong> testo <strong>di</strong> gran<strong>di</strong> <strong>di</strong>mensioni,<br />

a meno che non si abbia una ragione veramente buona per farlo. Non si imposti<br />

una variabile con il contenuto <strong>di</strong> un file binario, neanche per scherzo.<br />

Esempio 14-1. Stupid script tricks<br />

#!/bin/bash<br />

# stupid-script-tricks.sh: Gente, non eseguitelo!<br />

# Da "Stupid Script Tricks," Volume I.<br />

variabile_pericolosa=‘cat /boot/vmlinuz‘ # Il kernel Linux compresso.<br />

echo "Lunghezza della stringa \$variabile_pericolosa = ${#variabile_pericolosa<br />

# Lunghezza della stringa $variabile_pericolosa = 794151<br />

# (Non dà lo stesso risultato <strong>di</strong> ’wc -c /boot/vmlinuz’.)<br />

# echo "$variabile_pericolosa"<br />

# Non fatelo! Bloccherebbe l’esecuzione dello script.<br />

# L’autore <strong>di</strong> questo documento vi ha informato sull’assoluta inutilità delle<br />

#+ applicazioni che impostano una variabile al contenuto <strong>di</strong> un file binario.<br />

exit 0<br />

È da notare che in uno script non si verifica un buffer overrun. Questo è un<br />

esempio <strong>di</strong> come un linguaggio interpretato, qual’è <strong>Bash</strong>, possa fornire una<br />

maggiore protezione dagli errori del programmatore rispetto ad un linguaggio<br />

compilato.<br />

La sostituzione <strong>di</strong> comando consente <strong>di</strong> impostare una variabile con l’output <strong>di</strong> un ciclo. La chiave per<br />

far ciò consiste nel racchiudere l’output del comando echo all’interno del ciclo.<br />

Esempio 14-2. Generare una variabile da un ciclo<br />

#!/bin/bash<br />

# csubloop.sh: Impostazione <strong>di</strong> una variabile all’output <strong>di</strong> un ciclo.<br />

variabile1=‘for i in 1 2 3 4 5<br />

do<br />

echo -n "$i" # In questo caso il comando ’echo’ è<br />

done‘ #+ cruciale nella sostituzione <strong>di</strong> comando.<br />

echo "variabile1 = $variabile1" # variabile1 = 12345<br />

i=0<br />

variabile2=‘while [ "$i" -lt 10 ]<br />

do<br />

387

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

Saved successfully!

Ooh no, something went wrong!