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.

source<br />

. (comando punto )<br />

Capitolo 11. Coman<strong>di</strong> interni e builtin<br />

# Se un’opzione si aspetta un argomento ("flag:"), viene presa<br />

# qualunque cosa si trovi vicino.<br />

NO_ARG=0<br />

E_ERR_OPZ=65<br />

if [ $# -eq "$NO_ARG" ] # Lo script è stato invocato senza<br />

#+ alcun argomento?<br />

then<br />

echo "Utilizzo: ‘basename $0‘ opzioni (-mnopqrs)"<br />

exit $E_ERR_OPZ # Se non ci sono argomenti, esce e<br />

#+ spiega come usare lo script.<br />

fi<br />

# Utilizzo: nomescript -opzioni<br />

# Nota: è necessario il trattino (-)<br />

while getopts ":mnopq:rs" Opzione<br />

do<br />

case $Opzione in<br />

m ) echo "Scenario nr.1: opzione -m- [OPTIND=${OPTIND}]";;<br />

n | o ) echo "Scenario nr.2: opzione -$Opzione- [OPTIND=${OPTIND}]";;<br />

p ) echo "Scenario nr.3: opzione -p- [OPTIND=${OPTIND}]";;<br />

q ) echo "Scenario nr.4: opzione -q-\<br />

con argomento \"$OPTARG\" [OPTIND=${OPTIND}]";;<br />

# Notate che l’opzione ’q’ deve avere un argomento associato,<br />

# altrimenti salta alla voce predefinita del costrutto case.<br />

r | s ) echo "Scenario nr.5: opzione -$Opzione-"”;;<br />

* ) echo "È stata scelta un’opzione non implementata.";; # DEFAULT<br />

esac<br />

done<br />

shift $(($OPTIND - 1))<br />

# Decrementa il puntatore agli argomenti in modo che punti al successivo.<br />

# $1 fa ora riferimento al primo elemento non-opzione fornito da riga <strong>di</strong><br />

#+ comando, ammesso che ci sia.<br />

exit 0<br />

# Come asserisce Bill Gradwohl,<br />

# "Il funzionamento <strong>di</strong> getopts permette <strong>di</strong> specificare: nomescript -mnop -mnop,<br />

#+ ma non esiste, utilizzando OPTIND, nessun modo affidabile per <strong>di</strong>fferenziare<br />

#+ da dove proviene che cosa."<br />

Comportamento dello Script<br />

Questa istruzione, se invocata da riga <strong>di</strong> comando, esegue uno script. All’interno <strong>di</strong> uno script,<br />

source nome-file carica il file nome-file. Caricando un file (comando-punto) si importa<br />

211

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

Saved successfully!

Ooh no, something went wrong!