Perdoe-me por este é um script muito simples em Bash. Aqui está o código:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
depois de executar sh file.sh:
erro de sintaxe: fim de arquivo inesperado
Outra coisa a verificar (apenas me ocorreu):
Ou seja, este snippet de aparência inocente causará o mesmo erro:
Para deixar o analisador burro feliz:
fonte
;
é que se espera que a instrução Every termine com, de;
modo que no final, por exemplo:if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
irá produzir aquele erro, enquantoif [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash; fi;
que não ... observe os pequenos pontos-e-vírgulas no final, ou seja: após.bash
efi
.zsh
usuário. O ex funciona emzsh
mas não nosh
nembash
. Queria ser 4 pessoas para poder dar 4 votos positivosTambém acabei de receber esta mensagem de erro ao usar a sintaxe errada em uma
if
cláusulaelse if
(erro de sintaxe: fim de arquivo inesperado)elif
(sintaxe correta)eu depurei comentando bits até que funcionou
fonte
uma cláusula não fechada if => fi também aumentará isso
dica: use trap para depurar, se seu script for enorme ...
por exemplo
fonte
unexpected end of file
erro ocorrerá assim quefi
for atingido.Eu obtive essa resposta com este problema semelhante no StackOverflow
Abra o arquivo no Vim e tente
:set fileformat=unix
Obrigado @lemongrassnginger
fonte
dos2unix
que a resposta aceita aconselha.no cygwin eu precisava: -
em .bash_profile. Dessa forma eu não precisei rodar o unix2dos
fonte
Então eu encontrei este post e as respostas não me ajudaram, mas eu consegui descobrir porque ele me deu o erro. eu tive um
O problema era que copiei o código acima para estar em uma função e, inadvertidamente, tabulei o código. É necessário certificar-se de que o último EOF não seja tabulado.
fonte
EOF
recuado quatro espaços e o bash não o analisou por causa disso. Remover espaços corrigiu o problema.Tive o problema quando escrevi a instrução "if - fi" em uma linha:
Escrever multilinha resolveu meu problema:
fonte
Isso estava acontecendo comigo quando eu estava tentando chamar uma função usando parênteses, por exemplo
deveria estar:
fonte
PARA WINDOWS:
No meu caso, estava trabalhando no sistema operacional Windows e recebi o mesmo erro ao executar o autoconf.
Então eu converti o arquivo com conversão EOL para Windows (CR LF) da seguinte maneira:
EDITAR -> CONVERSÃO EOL -> WINDOWS (CR LF)
fonte
Consegui recortar e colar seu código em um arquivo e ele funcionou corretamente. Se você executá-lo assim, ele deve funcionar:
Seu "file.sh":
O comando:
Observe que "file.sh" deve ser executável:
Você pode estar recebendo esse erro por causa de como está fazendo a entrada (com um cano, cenoura, etc.). Você também pode tentar dividir a condição em duas:
Ou, já que está usando
bash
, você pode usar a sintaxe integrada:E, finalmente, você pode, é claro, apenas verificar se 3 argumentos foram fornecidos (limpar, mantém a compatibilidade do shell POSIX):
fonte
Acabei de recortar e colar seu exemplo em um arquivo; funcionou bem no bash. Eu não vejo nenhum problema com isso.
Para uma boa medida, você pode querer garantir que termine com uma nova linha, embora o bash não deva se importar. (Funciona para mim com e sem a nova linha final.)
Às vezes, você verá erros estranhos se incorporar acidentalmente um caractere de controle ao arquivo. Como é um script curto, tente criar um novo script colando-o de sua pergunta aqui no StackOverflow ou simplesmente digitando-o novamente.
Qual versão do bash você está usando? (
bash --version
)Boa sorte!
fonte
Certifique-se de que o nome do diretório no qual o arquivo .sh está presente não tenha um caractere de espaço. Por exemplo: digamos que se estiver em uma pasta chamada 'Nova pasta', você certamente encontrará o erro que citou. Em vez disso, apenas nomeie como 'New_Folder'. Eu espero que isso ajude.
fonte
Aparentemente, algumas versões do shell também podem emitir essa mensagem quando a linha final do seu script não tem uma nova linha.
fonte
No Ubuntu:
Então,
File -> Save as
e definirend line
paraUnix/Linux
fonte
Eu sei que estou muito atrasado para a festa. Espero que isso possa ajudar alguém.
Verifique seu arquivo .bashrc. Talvez renomeie ou mova.
Discussão aqui: Não é possível obter um script bash simples
fonte
Para pessoas que usam MacOS:
Se você recebeu um arquivo no formato Windows e queria rodar no MacOS e está vendo este erro, execute estes comandos.
fonte
A falta de uma chave de fechamento em uma definição de função causará esse erro, como acabei de descobrir.
Que claro que deveria ser assim ...
fonte
No meu caso, há redundância
\
no seguinte:Há não um
\
, no final deDATA.PATH_PREFIX ./afs/kinetics400
fonte