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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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

#<br />

# Changes<br />

# 21-03-95 stv fixed error occuring with 0xb as input (0.2)<br />

################################################################################<br />

# ==> Utilizzato in questo documento con il permesso dell’autore dello script.<br />

# ==> Commenti aggiunti dall’autore del libro.<br />

NOARG=65<br />

NP=‘basename "$0"‘ # Nome del programma<br />

VER=‘echo ’$Revision: 1.2 $’ | cut -d’ ’ -f2‘ # ==> VER=1.2<br />

Utilizzo () {<br />

echo "$NP - visualizza un numero in basi <strong>di</strong>verse, $VER (stv ’95)<br />

utilizzo: $NP [numero ...]<br />

Se non viene fornito alcun numero, questi vengono letti dallo standard input.<br />

Un numero può essere<br />

binario (base 2) inizia con 0b (es. 0b1100)<br />

ottale (base 8) inizia con 0 (es. 014)<br />

esadecimale (base 16) inizia con 0x (es. 0xc)<br />

decimale negli altri casi (es. 12)" >&2<br />

exit $NOARG<br />

} # ==> Funzione per la visualizzazione del messaggio <strong>di</strong> utilizzo.<br />

Msg () {<br />

for i # ==> manca in [lista].<br />

do echo "$NP: $i" >&2<br />

done<br />

}<br />

Fatale () { Msg "$@"; exit 66; }<br />

VisualizzaBasi () {<br />

# Determina la base del numero<br />

for i # ==> manca in [lista] ...<br />

do # ==> perciò opera sugli argomenti forniti da riga <strong>di</strong> comando.<br />

case "$i" in<br />

0b*) ibase=2;; # binario<br />

0x*|[a-f]*|[A-F]*) ibase=16;; # esadecimale<br />

0*) ibase=8;; # ottale<br />

[1-9]*) ibase=10;; # decimale<br />

*)<br />

Msg "$i numero non valido - ignorato"<br />

continue;;<br />

esac<br />

# Toglie il prefisso, converte le cifre esadecimali in caratteri<br />

#+ maiuscoli (è richiesto da bc)<br />

numero=‘echo "$i" | sed -e ’s:^0[bBxX]::’ | tr ’[a-f]’ ’[A-F]’‘<br />

# ==> Si usano i ":" come separatori per sed, al posto della "/".<br />

# Converte il numero in decimale<br />

dec=‘echo "ibase=$ibase; $numero" | bc‘<br />

318

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

Saved successfully!

Ooh no, something went wrong!