3 581
contributi
(uso di shift) |
|||
Riga 149: | Riga 149: | ||
; <code>$@</code> : contiene la lista di tutti i parametri passati allo script corrente o a una funzione. Ogni parametro viene opportunamente quotato, se questa variabile è quotata, e questo ne permette l'utilizzo nei '''cicli for''' per processare (ad esempio) una lista di nomi di file che possono contenere anche spazi. L'uso di questa variabile è quindi in genere preferito rispetto a <code>'''$*'''</code> che ha la stessa funzione ma, se quotata, non quota i vari parametri ma l'intera stringa; | ; <code>$@</code> : contiene la lista di tutti i parametri passati allo script corrente o a una funzione. Ogni parametro viene opportunamente quotato, se questa variabile è quotata, e questo ne permette l'utilizzo nei '''cicli for''' per processare (ad esempio) una lista di nomi di file che possono contenere anche spazi. L'uso di questa variabile è quindi in genere preferito rispetto a <code>'''$*'''</code> che ha la stessa funzione ma, se quotata, non quota i vari parametri ma l'intera stringa; | ||
Esempio: | |||
<pre> | <pre> | ||
# in "$@" si può anche omettere (lasciando solo: for file) perché implicito | |||
for file in "$@" | for file in "$@" | ||
do | do | ||
# fare quello che si vuole con "$file" | # fare quello che si vuole con "$file" | ||
... | ... | ||
done | |||
</pre> | |||
L'istruzione <code>shift</code> può essere usata per rimuovere i parametri più a sinistra (partendo da <code>$1</code>), spostando tutti gli altri (<code>$1</code><-<code>$2</code>, <code>$2</code><-<code>$3</code>, ...), in questo modo si possono accedere come una lista solo i successivi. | |||
Per esempio, codice che crea una lista di file in un percorso scelto: | |||
<pre> | |||
# Sintassi accettata: nomescript destinazione lista_file... | |||
# controllo numero argomenti | |||
if [ $# -lt 2 ]; then | |||
printf %s\\n "Sono richiesti almeno due argomenti!" >&2 | |||
exit 1 | |||
fi | |||
# assegno il primo argomento | |||
destinazine=$1 | |||
shift # ora $* e $@ contengono tutti gli altri parametri ($1<-$2, $2<-$3, ...) | |||
# ossia la lista di file | |||
# controllo l'esistenza della destinazione | |||
if ! [ -d "$destinazione" ]; then | |||
printf %s\\n "Directory di destinazione non trovata!" >&2 | |||
exit 2 | |||
fi | |||
# eseguo un ciclo su tutti i file della lista | |||
# si ricorda che è implicito: in "$@" | |||
for file | |||
do | |||
# crea il file | |||
if ! touch -- "${destinazione}/${file}"; then | |||
# se fallisce si interrompe e stampa un errore | |||
printf %s\\n "Impossibile creare il file \"${destinazione}/${file}\"!" >&2 | |||
exit 3 | |||
fi | |||
done | done | ||
</pre> | </pre> | ||
Riga 162: | Riga 195: | ||
; <code>$!</code> : PID dell'ultimo job in background. | ; <code>$!</code> : PID dell'ultimo job in background. | ||
Esempio: | |||
<pre> | <pre> | ||
comando & # lancio un comando in background | comando & # lancio un comando in background |
contributi