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.

m4<br />

doexec<br />

}<br />

Unità1=miglia<br />

Unità2=metri<br />

fatt_conv =‘converte_unità $Unità1 $Unità2‘<br />

quantità=3.73<br />

risultato=$(echo $quantità*$fatt_conv | bc)<br />

echo "Ci sono $risultato $Unità2 in $quantità $Unità1."<br />

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

# Cosa succede se vengono passate alla funzione unità <strong>di</strong> misura<br />

#+ incompatibili, come "acri" e "miglia"?<br />

exit 0<br />

Un tesoro nascosto, m4 è un potente filtro per l’elaborazione <strong>di</strong> macro, 13 virtualmente un<br />

linguaggio completo. Quantunque scritto originariamente come pre-processore per RatFor, m4 è<br />

risultato essere utile come utility in<strong>di</strong>pendente. Infatti, m4 combina alcune delle funzionalità <strong>di</strong><br />

eval, tr e awk con le sue notevoli capacità <strong>di</strong> espansione <strong>di</strong> macro.<br />

Nel numero dell’aprile 2002 <strong>di</strong> Linux Journal (http://www.linuxjournal.com) vi è un bellissimo<br />

articolo su m4 ed i suoi impieghi.<br />

Esempio 12-58. Utilizzo <strong>di</strong> m4<br />

#!/bin/bash<br />

# m4.sh: Uso del processore <strong>di</strong> macro m4<br />

# Stringhe<br />

stringa=abcdA01<br />

echo "len($stringa)" | m4 # 7<br />

echo "substr($stringa,4)" | m4 # A01<br />

echo "regexp($stringa,[0-1][0-1],\&Z)" | m4 # 01Z<br />

# Calcoli aritmetici<br />

echo "incr(22)" | m4 # 23<br />

echo "eval(99 / 3)" | m4 # 33<br />

exit 0<br />

Il comando doexec abilita il passaggio <strong>di</strong> un elenco <strong>di</strong> argomenti, <strong>di</strong> lunghezza arbitraria, ad un<br />

binario eseguibile. In particolare, passando argv[0] (che corrisponde a $0 in uno script), permette<br />

che l’eseguibile possa essere invocato con nomi <strong>di</strong>fferenti e svolgere una serie <strong>di</strong> azioni <strong>di</strong>verse, in<br />

339

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

Saved successfully!

Ooh no, something went wrong!