Я пытаюсь создать приложение spritz. Все работало нормально, но со вчерашнего дня я продолжаю получать эту ошибку:
./spritz: строка 176: синтаксическая ошибка: неожиданный конец файла
Я проверил файл сценария, и все кажется идеальным. Я запутался, у меня наконец-то есть утверждение if, и оно выглядит правильно! Вот последняя часть:
#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
Что может вызвать эту ошибку?
bash
shell-script
Скотт Пирс
источник
источник
;
(точка с запятой) в конце строки , Вы можете удалить точки с запятой в концах строк 157, 161, 165, 168 и 169. (Или вы можете оставить их; я думаю, это вопрос стиля.)… (Продолжение)"$1"
,"$2"
,"$SECONDS"
и"$starttime"
. (3) Проще читать и отлаживать код с отступом. (4) Почему вы настраиваете,FS
а затем не используете его? (5)`…`
может быть написано$(…)
. (6)$(($SECONDS - $starttime))
может быть эквивалентно написано$((SECONDS - starttime))
. Опять же, это в основном вопрос стиля. (7) Почему вы печатаете"$words_read"
в цикле, если вы не изменяете его в цикле?`grep …`
список значений. Другими словами, используйте процесс устранения."$1"
нужно только цитировать, (объявление 4), вероятно, он имел в видуIFS
(а неFS
)?Ответы:
Диагностический «неожиданный конец файла» - это подсказка о том, что у вас есть какая-то несоответствующая или не определенная открывающая синтаксическая конструкция (
if
безfi
,do
безdone
, открывающие скобки без соответствующей закрывающей, открывающие, но не определенные кавычки и т. Д.). Номер строки, указывающий на конец скрипта, в этом случае не полезен, кроме как для проверки ваших синтаксических конструкций; ошибка может быть где угодно в вашем коде. Вы должны это проверить.источник