Erro de sintaxe: final inesperado do arquivo - Script Bash [fechado]


20

Estou tentando criar um aplicativo spritz. Tudo estava funcionando bem, mas desde ontem eu continuo recebendo este erro:

./spritz: linha 176: erro de sintaxe: final inesperado do arquivo

Eu verifiquei o arquivo de script e tudo parece perfeito. Estou confuso, tenho uma declaração if finalmente e parece correta! Aqui está a última parte:

#checks if speed is 150
157 if [[ $2 -eq 150 ]];
158 then
159 starttime=$SECONDS
160      FS=$'\n'
161      for j in `grep --color=always -iP '\b[^aeiou\s]*[aeiou][^aeiou\s]*\K[aeiou]' $1`;
162      do
163            #Reads the text file in the centre of the screen
164            echo "                                                    ___________________"
165            echo "                                                             $j";
166            echo "                                                    ___________________"
167            echo "                                                                               Speed 150 wpm"
168            sleep  0.9;
169            clear;
170       done
171 endtime=$(($SECONDS - $starttime))
172            echo "You read $words_read words in $endtime seconds!"
173       exit 8
174 fi

O que poderia causar esse erro?


(0) Pode ter sido mais útil nos mostrar uma diferença da última versão que funcionou. ……………………… Algumas observações (que provavelmente não se relacionam com o seu problema atual e específico): (1) não conheço nenhuma circunstância em que você precise de um ;ponto-e-vírgula sem escape no final de uma linha . Você pode excluir os pontos e vírgulas no final das linhas 157, 161, 165, 168 e 169. (Ou você pode deixá-los dentro; acho que é uma questão de estilo.)… (Continua)
Scott

1
(Continua) ... (2) Você deve sempre citar variáveis ​​de shell, a menos que tenha um bom motivo para não fazê-lo e tenha certeza de que sabe o que está fazendo; por exemplo, "$1", "$2", "$SECONDS", e "$starttime". (3) É mais fácil ler e depurar códigos recuados corretamente. (4) Por que você está configurando FSe depois não o está usando? (5) `…`pode ser escrito $(…). (6) $(($SECONDS - $starttime))pode ser equivalente $((SECONDS - starttime)). Novamente, isso é basicamente uma questão de estilo. (7) Por que você está imprimindo "$words_read"no loop quando não o está modificando?
29315 Scott

Aqui está uma abordagem de depuração: tente excluir as linhas 157-174 e executar o script novamente. Se você ainda receber o erro (provavelmente relatado como estando na linha 157 ou 158), sabe que o problema não está nas linhas 157-174 e precisa olhar mais para trás (repita o processo até que o erro desapareça ) ... (continua)
Scott

(Continua) ... Quando o erro desaparecer, insira as últimas linhas que você excluiu e comece a desviá-las. Por exemplo, se a exclusão das linhas 157-174 faz com que o erro desapareça, coloque-as novamente, mas exclua as linhas 159-160, 163-168 e 171-172. Tente substituir o `grep …`por uma lista de valores. Em outras palavras, use o processo de eliminação.
29315 Scott

Comentários sobre alguns dos comentários de Scott: (anúncio 2) se você tem certeza do que está fazendo, então (no código publicado) só "$1"precisa ser citado, (anúncio 4) provavelmente ele quis dizer IFS(e não FS)?
Janis

Respostas:


29

O diagnóstico "final inesperado do arquivo" é uma dica de que você tem alguma construção sintática de abertura incomparável ou não terminada ( ifsem fi, dosem done, entre parênteses de abertura sem a associada de fechamento, entre aspas de abertura mas não terminadas, etc.). O número da linha apontando para o final do script não é útil nesse caso, além de dizer para inspecionar suas construções sintáticas; o erro pode estar em qualquer lugar no seu código. Você tem que verificar isso.


Obrigado pela resposta. Eu encontrei o erro e o corrigi!
Scott Pearce

- o erro pode estar em qualquer lugar do seu código. Criou a conta apenas para votar com antecedência neste conselho.
user340352 6/03
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.