Error de sintaxis: final inesperado del archivo - Script Bash [cerrado]


20

Estoy tratando de crear una aplicación de spritz. Todo funcionaba bien, pero desde ayer sigo recibiendo este error:

./spritz: línea 176: error de sintaxis: final inesperado del archivo

He revisado el archivo de script y todo parece perfecto. Estoy confundido, ¡tengo una declaración if por fin y parece correcta! Aquí está la última porción:

#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

¿Qué podría causar ese error?


(0) Podría haber sido más útil mostrarnos una diferencia de la última versión que funcionó. ... ... ... ... ... ... ... ... Algunas observaciones (que probablemente no se relacionan con su problema actual y específico): (1) No sé de ninguna circunstancia en la que necesite un ;punto y coma sin escape al final de una línea. . Puede eliminar los puntos y comas en los extremos de las líneas 157, 161, 165, 168 y 169. (O puede dejarlos dentro; supongo que es una cuestión de estilo.) ... (Continúa)
Scott

1
(Cont.) ... (2) Siempre debe citar variables de shell a menos que tenga una buena razón para no hacerlo y esté seguro de saber lo que está haciendo; por ejemplo, "$1", "$2", "$SECONDS", y "$starttime". (3) Es más fácil leer y depurar el código que está sangrado correctamente. (4) ¿Por qué lo configura FSy luego no lo usa? (5) `…`se puede escribir $(…). (6) $(($SECONDS - $starttime))se puede escribir de manera equivalente $((SECONDS - starttime)). Nuevamente, esto es básicamente una cuestión de estilo. (7) ¿Por qué imprime "$words_read"en el bucle cuando no lo modifica en el bucle?
Scott

Aquí hay un enfoque de depuración: intente eliminar las líneas 157-174 y vuelva a ejecutar el script. Si aún recibe el error (probablemente se informa que está en la línea 157 o 158), entonces sabe que el problema no está en las líneas 157-174, y debe mirar hacia atrás (así que repita el proceso hasta que el error desaparezca). ) ... (Continúa)
Scott

(Continúa) ... Una vez que el error desaparece, vuelve a colocar las últimas líneas que eliminaste y comienza a eliminarlas. Por ejemplo, si eliminar las líneas 157-174 hace que el error desaparezca, vuelva a colocarlas, pero luego elimine las líneas 159-160, 163-168 y 171-172. Intente reemplazar el `grep …`con una lista de valores. En otras palabras, use el proceso de eliminación.
Scott

Observaciones sobre algunos de los comentarios de Scott: (anuncio 2) si está seguro de lo que está haciendo, entonces (en el código publicado) solo "$1"necesita ser citado, (anuncio 4) ¿probablemente quiso decir IFS(y no FS)?
Janis

Respuestas:


29

El diagnóstico "final inesperado del archivo" es un indicio de que tiene una construcción sintáctica de apertura no coincidente o no terminada ( ifw / o fi, dow / o done, paréntesis de apertura sin el cierre asociado, comillas de apertura pero sin terminar, etc.). El número de línea que apunta al final del guión no es útil en este caso, más allá de decir que inspeccione sus construcciones sintácticas; El error puede estar en cualquier parte de su código. Tienes que comprobar eso.


Gracias por la respuesta. ¡Encontré el error y lo solucioné!
Scott Pearce

- el error puede estar en cualquier parte de su código. Cuenta creada solo para votar por este consejo.
user340352
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.