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?
"$1"
, "$2"
, "$SECONDS"
, und "$starttime"
. (3) Es ist einfacher, richtig eingerückten Code zu lesen und zu debuggen. (4) Warum stellen Sie es ein FS
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 er IFS
(und nicht FS
)?
;
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)