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.

canzone="(nessuna risposta)"<br />

# Risposta preimpostata.<br />

fi<br />

echo "La tua canzone preferita è $canzone."<br />

Capitolo 9. Variabili riviste<br />

Esistono altri meto<strong>di</strong>, più complessi, per implementare un input temporizzato in uno script. Una<br />

possibile alternativa è quella <strong>di</strong> impostare un ciclo <strong>di</strong> temporizzazione per segnalare allo script<br />

quando il tempo è scaduto. Ma anche così è necessaria una routine per la gestione <strong>di</strong> un segnale per<br />

catturare (trap) (ve<strong>di</strong> Esempio 29-5) l’interrupt generato dal ciclo <strong>di</strong> temporizzazione (fiu!).<br />

Esempio 9-2. Input temporizzato<br />

#!/bin/bash<br />

# timed-input.sh<br />

# TMOUT=3 Funziona anche questo, a partire dalle più recenti<br />

# versioni <strong>di</strong> <strong>Bash</strong>.<br />

TEMPOLIMITE=3 # In questo caso tre secon<strong>di</strong>. Può essere impostato<br />

#+ ad un valore <strong>di</strong>verso.<br />

VisualizzaRisposta()<br />

{<br />

if [ "$risposta" = TIMEOUT ]<br />

then<br />

echo $risposta<br />

else # Ho voluto tenere separati i due esempi.<br />

echo "La tua verdura preferita è $risposta"<br />

kill $! # Uccide la funzione AvvioTimer in esecuzione in<br />

#+ background perché non più necessaria. $! è il PID<br />

#+ dell’ultimo job in esecuzione in background.<br />

}<br />

fi<br />

AvvioTimer()<br />

{<br />

sleep $TEMPOLIMITE && kill -s 14 $$ &<br />

# Attende 3 secon<strong>di</strong>, quin<strong>di</strong> invia il segnale SIGALARM allo script.<br />

}<br />

Int14Vettore()<br />

{<br />

risposta="TIMEOUT"<br />

VisualizzaRisposta<br />

exit 14<br />

107

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

Saved successfully!

Ooh no, something went wrong!