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.

if [ "$BASH_VERSION" \< "$versione_minima" ]<br />

then<br />

echo "Questo script funziona solo con <strong>Bash</strong>, versione"<br />

echo "$versione_minima o superiore."<br />

echo "Se ne consiglia caldamente l’aggiornamento."<br />

exit $E_ERR_VERSIONE<br />

fi<br />

...<br />

Capitolo 31. Precauzioni<br />

Usare le funzionalità specifiche <strong>di</strong> <strong>Bash</strong> in uno script <strong>di</strong> shell Bourne (#!/bin/sh) su una macchina<br />

non Linux può provocare un comportamento inatteso. Un sistema Linux <strong>di</strong> solito esegue l’alias <strong>di</strong> sh a<br />

bash, ma questo non è necessariamente vero per una generica macchina UNIX.<br />

Usare funzionalità non documentate in <strong>Bash</strong> può rivelarsi una pratica pericolosa. Nelle versioni<br />

precedenti <strong>di</strong> questo libro erano presenti <strong>di</strong>versi script che si basavano su una “funzionalità” che, sebbene<br />

il valore massimo consentito per exit o return fosse 255, permetteva agli interi negativi <strong>di</strong> superare tale<br />

limite. Purtroppo, con la versione 2.05b e successive, tale scappatoia è scomparsa. Ve<strong>di</strong> Esempio 23-9.<br />

Uno script con i caratteri <strong>di</strong> a capo <strong>di</strong> tipo DOS (\r\n) fallisce l’esecuzione poiché<br />

#!/bin/bash\r\n non viene riconosciuto, non è la stessa cosa dell’atteso #!/bin/bash\n. La<br />

correzione consiste nel convertire tali caratteri nei corrispondenti UNIX.<br />

#!/bin/bash<br />

echo "Si parte"<br />

unix2dos $0 # lo script viene trasformato nel formato DOS.<br />

chmod 755 $0 # Viene ripristinato il permesso <strong>di</strong> esecuzione.<br />

# Il comando ’unix2dos’ elimina i permessi <strong>di</strong> escuzione.<br />

./$0 # Si tenta la riesecuzione dello script.<br />

# Come file DOS non può più funzionare.<br />

echo "Fine"<br />

exit 0<br />

Uno script <strong>di</strong> shell che inizia con #!/bin/sh non funziona in modalità <strong>di</strong> piena compatibilità <strong>Bash</strong>.<br />

Alcune funzioni specifiche <strong>di</strong> <strong>Bash</strong> potrebbero non essere abilitate. Gli script che necessitano <strong>di</strong> un<br />

accesso completo a tali estensioni devono iniziare con #!/bin/bash.<br />

Mettere degli spazi davanti alla stringa limite <strong>di</strong> chiusura <strong>di</strong> un here document provoca un<br />

comportamento inatteso dello script.<br />

535

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

Saved successfully!

Ooh no, something went wrong!