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.

Capitolo 15. Espansione aritmetica<br />

L’espansione aritmetica fornisce un potente strumento per l’esecuzione delle operazioni matematiche<br />

(sugli interi) negli script. È relativamente semplice trasformare una stringa in un’espressione numerica<br />

usando i costrutti apici inversi, doppie parentesi o let.<br />

Variazioni<br />

Espansione aritmetica con apici inversi (spesso usata in abbinamento con expr)<br />

z=‘expr $z + 3‘ # Il comando ’expr’ esegue l’espansione.<br />

Espansione aritmetica con doppie parentesi<br />

ed uso <strong>di</strong> let<br />

L’uso degli apici inversi nell’espansione aritmetica è stato sostituito dalle doppie parentesi --<br />

((...)) e $((...)) -- e anche dal convenientissimo costrutto let.<br />

z=$(($z+3))<br />

z=$((z+3)) # Corretto anche così.<br />

# All’interno delle doppie<br />

#+ parentesi la dereferenziazione<br />

#+ del parametro è opzionale.<br />

# $((ESPRESSIONE)) è un’espansione aritmetica. # Non deve essere confusa con<br />

#+ la sostituzione <strong>di</strong> comando.<br />

# Nelle doppie parentesi è possibile effettuare operazioni senza assegnamento.<br />

n=0<br />

echo "n = $n" # n = 0<br />

(( n += 1 )) # Incremento.<br />

# (( $n += 1 )) non è corretto!<br />

echo "n = $n" # n = 1<br />

let z=z+3<br />

let "z += 3" # Il quoting consente l’uso degli spazi nell’assegnamento<br />

#+ <strong>di</strong> variabile.<br />

# L’operatore ’let’ in realtà esegue una valutazione aritmetica,<br />

#+ piuttosto che un’espansione.<br />

Esempi <strong>di</strong> espansione aritmetica negli script:<br />

392

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

Saved successfully!

Ooh no, something went wrong!