Não há nada no script que deva dar esse erro. Se você executar o script com sh ./script.sh
, ele produzirá
TEST LAST LOOP
como saída. Se executá-lo com bash ./script.sh
, você obterá a mesma saída, mas com um erro adicional de "expressão de inteiração esperada", pois t
não é um inteiro (isso também pode acontecer se você executar com sh
se seu sh
for implementado por bash
). Se você executar com ./script.sh
, o shell provavelmente irá reclamar com "Nenhum arquivo ou diretório", uma vez que você não adicionou uma #!
-line adequada.
Neste script, você pode usar #!/bin/sh
como a #!
-line, pois você só usa os recursos POSIX padrão.
O teste [ t -eq 1 ]
nunca será verdadeiro, pois t
(o caractere) não é um inteiro. Se você está configurando a variável t
para um número inteiro em algum lugar, use [ "$t" -eq 1 ]
no teste.
A única maneira de conseguir que um shell diga "fim de arquivo inesperado" é convertendo o script em um arquivo de texto do DOS e executando-o com bash
.
Se você receber este erro, o arquivo de script provavelmente é um arquivo de texto do DOS (possivelmente devido à criação em uma máquina Windows). Você deve executar dos2unix
no script.
Veja as perguntas relacionadas a dos2unix
.