J'essaie de créer une application spritz. Tout fonctionnait bien, mais depuis hier, je reçois toujours cette erreur:
./spritz: ligne 176: erreur de syntaxe: fin de fichier inattendue
J'ai vérifié le fichier de script et tout semble parfait. Je suis confus, j'ai enfin une déclaration if et ça a l'air correct! Voici la dernière partie:
#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'est-ce qui pourrait provoquer cette erreur?
bash
shell-script
Scott Pearce
la source
la source
;
(point-virgule) non échappé à la fin d'une ligne . Vous pouvez supprimer les points-virgules à la fin des lignes 157, 161, 165, 168 et 169. (Ou vous pouvez les laisser; je suppose que c'est une question de style.)… (Suite)"$1"
,"$2"
,"$SECONDS"
et"$starttime"
. (3) Il est plus facile de lire et de déboguer du code mis en retrait correctement. (4) Pourquoi configurez-vousFS
et ne l'utilisez-vous pas? (5)`…`
peut être écrit$(…)
. (6)$(($SECONDS - $starttime))
peut être écrit de manière équivalente$((SECONDS - starttime))
. Encore une fois, c'est essentiellement une question de style. (7) Pourquoi imprimez-vous"$words_read"
dans la boucle alors que vous ne le modifiez pas dans la boucle?`grep …`
par une liste de valeurs. En d'autres termes, utilisez le processus d'élimination."$1"
besoin que de citer, (annonce 4) il voulait probablement direIFS
(et nonFS
)?Réponses:
Le diagnostic «fin de fichier inattendue» indique que vous avez une construction syntaxique d'ouverture inégalée ou non terminée (
if
sansfi
,do
sansdone
parenthèse, entre parenthèses ouvrantes sans fermeture associée, guillemets ouvrants mais non terminés, etc.). Le numéro de ligne pointant vers la fin du script n'est pas utile dans ce cas, au-delà de dire d'inspecter vos constructions syntaxiques; l'erreur peut se trouver n'importe où dans votre code. Vous devez vérifier cela.la source