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 26. Array<br />

# Ad ogni passaggio successivo lungo l’array che deve essere or<strong>di</strong>nato,<br />

#+ vengono confrontati due elementi a<strong>di</strong>acenti e scambiati se non or<strong>di</strong>nati.<br />

# Al termine del primo passaggio, l’elemento "più pesante" è sprofondato<br />

#+ nell’ultima posizione dell’array. Al termine del secondo passaggio, il<br />

#+ rimanente elemento "più pesante" si trova al penultimo posto. E così via.<br />

#+ Questo significa che ogni successivo passaggio deve attraversare una<br />

#+ porzione minore <strong>di</strong> array. Noterete, quin<strong>di</strong>, un aumento della velocità<br />

#+ <strong>di</strong> visualizzazione dopo ogni passaggio.<br />

scambio()<br />

{<br />

# Scambia due membri dell’array.<br />

local temp=${Paesi[$1]} # Variabile per la memorizzazione temporanea<br />

#+ dell’elemento che deve essere scambiato.<br />

Paesi[$1]=${Paesi[$2]}<br />

Paesi[$2]=$temp<br />

}<br />

return<br />

declare -a Paesi # Dichiara l’array,<br />

#+ in questo caso facoltativo perché viene inizializzato<br />

#+ successivamente.<br />

# È consentito sud<strong>di</strong>videre l’inizializzazione <strong>di</strong> un array su più righe<br />

#+ utilizzando il carattere <strong>di</strong> escape (\)?<br />

# Sì.<br />

Paesi=(Olanda Ucraina Zaire Turchia Russia Yemen Siria \<br />

Brasile Argentina Nicaragua Giappone Messico Venezuela Grecia Inghilterra \<br />

Israele Peru Canada Oman Danimarca Galles Francia Kenya \<br />

Xanadu Qatar Liechtenstein Ungheria)<br />

# "Xanadu" è il luogo mitico dove, secondo Coleridge,<br />

#+"Kubla Khan fece un duomo <strong>di</strong> delizia fabbricare".<br />

clear # Pulisce lo schermo prima <strong>di</strong> iniziare l’elaborazione.<br />

echo "0: ${Paesi[*]}" # Elenca l’intero array al passaggio 0.<br />

numero_<strong>di</strong>_elementi=${#Paesi[@]}<br />

let "confronti = $numero_<strong>di</strong>_elementi - 1"<br />

conto=1 # Numero <strong>di</strong> passaggi.<br />

while [ "$confronti" -gt 0 ] # Inizio del ciclo esterno<br />

do<br />

in<strong>di</strong>ce=0 # L’in<strong>di</strong>ce viene azzerato all’inizio <strong>di</strong> ogni passaggio.<br />

489

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

Saved successfully!

Ooh no, something went wrong!