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?
bash
shell-script
Scott Pearce
fuente
fuente
;
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)"$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 configuraFS
y 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?`grep …`
con una lista de valores. En otras palabras, use el proceso de eliminación."$1"
necesita ser citado, (anuncio 4) ¿probablemente quiso decirIFS
(y noFS
)?Respuestas:
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 (
if
w / ofi
,do
w / odone
, 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.fuente