Próbuję utworzyć aplikację spritz. Wszystko działało dobrze, ale od wczoraj ciągle pojawia się ten błąd:
./spritz: linia 176: błąd składniowy: nieoczekiwany koniec pliku
Sprawdziłem plik skryptu i wszystko wydaje się idealne. Jestem zmieszany, mam w końcu zdanie if i wygląda poprawnie! Oto ostatnia porcja:
#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
Co może powodować ten błąd?
bash
shell-script
Scott Pearce
źródło
źródło
;
(średnika) na końcu linii . Możesz usunąć średniki na końcach wierszy 157, 161, 165, 168 i 169. (Lub możesz je zostawić; Myślę, że to kwestia stylu.)… (Ciąg dalszy)"$1"
,"$2"
,"$SECONDS"
, i"$starttime"
. (3) Łatwiej jest czytać i debugować poprawnie wcięty kod. (4) Dlaczego ustawiasz,FS
a następnie nie używasz? (5)`…`
można zapisać$(…)
. (6)$(($SECONDS - $starttime))
można równoważnie zapisać$((SECONDS - starttime))
. Ponownie, jest to w zasadzie kwestia stylu. (7) Dlaczego drukujesz"$words_read"
w pętli, kiedy nie modyfikujesz jej w pętli?`grep …`
listą wartości. Innymi słowy, użyj procesu eliminacji."$1"
zacytować, (ad 4) prawdopodobnie miał na myśliIFS
(a nieFS
)?Odpowiedzi:
Diagnostyki „nieoczekiwany koniec pliku” jest wskazówką, że masz jakieś niezrównaną lub niezakończony otwarcia syntaktyczną konstrukt (
if
w / ofi
,do
w / odone
, wsporniki otwarcia W / O związany zamknięcia jednego otworu, ale niezakończony cytatów, etc.). Numer linii wskazujący na koniec skryptu nie jest w tym przypadku pomocny, poza mówiąc o sprawdzeniu konstrukcji składniowych; błąd może znajdować się w dowolnym miejscu w kodzie. Musisz to sprawdzić.źródło