Ich versuche eine Spritz App zu erstellen. Alles hat gut funktioniert, aber seit gestern bekomme ich immer wieder folgende Fehlermeldung:
./spritz: Zeile 176: Syntaxfehler: unerwartetes Dateiende
Ich habe die Skriptdatei überprüft und alles scheint perfekt zu sein. Ich bin verwirrt, ich habe endlich eine if-Anweisung und sie sieht richtig aus! Hier ist der letzte Teil:
#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
Was könnte diesen Fehler verursachen?
bash
shell-script
Scott Pearce
quelle
quelle
;
Semikolon am Ende einer Zeile benötigen . Sie können die Semikolons an den Enden der Zeilen 157, 161, 165, 168 und 169 löschen. (Oder Sie lassen sie in; ich denke, es ist eine Frage des Stils.)… (Fortsetzung)"$1"
,"$2"
,"$SECONDS"
, und"$starttime"
. (3) Es ist einfacher, richtig eingerückten Code zu lesen und zu debuggen. (4) Warum stellen Sie es einFS
und verwenden es dann nicht? (5)`…`
kann geschrieben werden$(…)
. (6)$(($SECONDS - $starttime))
kann äquivalent geschrieben werden$((SECONDS - starttime))
. Auch dies ist im Grunde eine Frage des Stils. (7) Warum drucken Sie"$words_read"
in der Schleife, wenn Sie sie nicht in der Schleife ändern?`grep …`
durch eine Liste von Werten zu ersetzen . Verwenden Sie mit anderen Worten den Prozess der Eliminierung."$1"
zitieren (zu 4), wahrscheinlich meinte erIFS
(und nichtFS
)?Antworten:
Die Diagnose „unerwartete Ende der Datei“ ist ein Hinweis , dass Sie ein ungestörtes oder ungekündigten Öffnung syntaktisches Konstrukt haben (
if
w / ofi
,do
w / odone
, Öffnungs Klammern w / o der damit verbundene Schließung einer, Öffnung , aber nicht abgeschlossene Kurse, etc.). Die Zeilennummer, die zum Ende des Skripts zeigt, ist in diesem Fall nicht hilfreich, außer um Ihre syntaktischen Konstrukte zu untersuchen. Der Fehler kann irgendwo in Ihrem Code sein. Das musst du überprüfen.quelle