<Anterior | Conteúdo | Próxima>
Tokens ausentes ou inesperados
Outro erro comum é esquecer de completar um comando composto, como if or enquanto. Vejamos o que acontece se removermos o ponto e vírgula após o teste no if comando:
#! / Bin / bash
# problema: script para demonstrar número de erros comuns = 1
se [$ number = 1] então
echo "O número é igual a 1." outro
echo "O número não é igual a 1."
fi
#! / Bin / bash
# problema: script para demonstrar número de erros comuns = 1
se [$ number = 1] então
echo "O número é igual a 1." outro
echo "O número não é igual a 1."
fi
O resultado é este:
[me @ linuxbox ~] $ problema
/ home / me / bin / trouble: linha 9: erro de sintaxe próximo a token inesperado
`else '
/ home / me / bin / trouble: linha 9: `else '
[me @ linuxbox ~] $ problema
/ home / me / bin / trouble: linha 9: erro de sintaxe próximo a token inesperado
`else '
/ home / me / bin / trouble: linha 9: `else '
Novamente, a mensagem de erro aponta para um erro que ocorre depois do problema real. O que acontece é realmente muito interessante. Como lembramos, if aceita uma lista de comandos e avalia o código de saída do último comando da lista. Em nosso programa, pretendemos que esta lista consista em um único comando, [, um sinônimo para teste. O [ comando considera o que se segue como uma lista de argumentos; no nosso caso, quatro argumentos: $ number, 1, = e ]. Com o ponto-e-vírgula removido, a palavra então é adicionado à lista de argumentos, o que é sintaticamente válido. A seguir eco o comando também é legal. É interpretado como outro comando na lista de comandos que if avaliará para um código de saída. O outro é encontrado em seguida, mas está fora do lugar, uma vez que o shell o reconhece como um palavra reservada (uma palavra que tem um significado especial para o shell) e não o nome de um comando, daí a mensagem de erro.