<Precedenti | Contenuti | Succ.>
Token mancanti o imprevisti
Un altro errore comune è dimenticare di completare un comando composto, come if or while. Vediamo cosa succede se togliamo il punto e virgola dopo il test nella if comando:
#! / Bin / bash
# problema: script per dimostrare errori comuni numero=1
se [ $numero = 1 ] allora
echo "Il numero è uguale a 1." altro
echo "Il numero non è uguale a 1."
fi
#! / Bin / bash
# problema: script per dimostrare errori comuni numero=1
se [ $numero = 1 ] allora
echo "Il numero è uguale a 1." altro
echo "Il numero non è uguale a 1."
fi
Il risultato è questo:
[io@linuxbox~]$ guaio
/home/me/bin/trouble: riga 9: errore di sintassi vicino a token imprevisto
'altro'
/home/me/bin/problema: riga 9: "altro"
[io@linuxbox~]$ guaio
/home/me/bin/trouble: riga 9: errore di sintassi vicino a token imprevisto
'altro'
/home/me/bin/problema: riga 9: "altro"
Anche in questo caso, il messaggio di errore punta a un errore che si verifica dopo il problema effettivo. Quello che succede è davvero molto interessante. Come ricordiamo, if accetta un elenco di comandi e valuta il codice di uscita dell'ultimo comando nell'elenco. Nel nostro programma, intendiamo che questa lista sia composta da un singolo comando, [, sinonimo di test. Il [ comando prende ciò che lo segue come un elenco di argomenti; nel nostro caso, quattro argomenti: numero di $, 1, =e ]. Tolto il punto e virgola, la parola poi viene aggiunto all'elenco degli argomenti, che è sintatticamente legale. Il seguente eco anche il comando è legale. Viene interpretato come un altro comando nell'elenco dei comandi che if valuterà per un codice di uscita. Il altro si incontra dopo, ma è fuori luogo, poiché la shell lo riconosce come parola riservata (una parola che ha un significato speciale per la shell) e non il nome di un comando, da cui il messaggio di errore.