구문 오류 : 예기치 않은 파일 끝 — Bash 스크립트 [닫힘]


20

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

그 오류의 원인은 무엇입니까?


(0) 작동했던 마지막 버전과의 차이점을 보여 주면 더 유용했을 것입니다. …………………… 몇 가지 관찰 (현재의 특정 문제와 관련이 없을 수도 있음) : (1) ;줄 끝에서 이스케이프 처리되지 않은 (세미콜론) 이 필요한 상황을 모르겠습니다. . 줄 157, 161, 165, 168 및 169의 끝에서 세미콜론을 삭제할 수 있습니다. (또는 그대로 둘 수 있습니다. 스타일의 문제인 것 같습니다.) ... (계속)
Scott

1
(계속)… (2) 타당한 이유가없고 자신이하고있는 일을 확실히 확신하지 않는 한 항상 셸 변수를 인용해야합니다. 예를 들어, "$1", "$2", "$SECONDS",와 "$starttime". (3) 올바르게 들여 쓰기 된 코드를 읽고 디버그하는 것이 더 쉽습니다. (4) 왜 설정 FS하고 사용하지 않습니까? (5) `…`를 쓸 수 있습니다 $(…). (6) $(($SECONDS - $starttime))동일하게 쓸 수 있습니다 $((SECONDS - starttime)). 다시, 이것은 기본적으로 스타일의 문제입니다. (7) 왜 인쇄하고 있습니까"$words_read" 루프에서 루프를 수정하지 않을 때 루프에서 입니까?
Scott

디버깅 방법은 다음과 같습니다. 157-174 행을 삭제하고 스크립트를 다시 실행하십시오. 여전히 157 행 또는 158 행에있는 것으로보고 된 오류가 발생하면 문제점을 알고있는 것입니다. 157-174 행에 가 없다는 더 이상 되돌아 봐야합니다. 따라서 오류가 사라질 때까지 프로세스를 반복하십시오. ). … (계속)
Scott

(계속)… 오류가 사라지면 마지막으로 삭제 한 줄을 다시 넣고 휘파람을 시작하십시오. 예를 들어, 157-174 행을 삭제하면 오류가 사라지면 다시 넣은 다음 159-160, 163-168 및 171-172 행을 삭제하십시오. 교체하십시오`grep …`값을 값 목록으로 . 즉, 제거 과정을 사용하십시오.
Scott

Scott의 의견 중 일부에 대한 언급 : (ad 2) 게시 한 코드에서 수행중인 작업이 확실하다면 "$1"인용 만 필요하고 (ad 4) 아마도 IFS( 의미가 아님 FS)?
Janis

답변:


29

진단 "예기치 않은 파일 끝" 은 일치하지 않거나 종료되지 않은 여는 구문 구문 ( ifw / o fi, dow / o done, 여는 닫는 괄호가없는 여는 괄호, 여는하지만 끝나지 않은 따옴표 등)이 있음을 암시합니다. 이 경우 스크립트의 끝을 가리키는 줄 번호는 구문 구조를 검사하는 것 외에는 도움이되지 않습니다. 오류는 코드의 어느 곳에 나있을 수 있습니다. 당신은 그것을 확인해야합니다.


답장을 보내 주셔서 감사합니다. 오류를 발견하고 수정했습니다!
Scott Pearce

-오류는 코드의 어느 곳에 나있을 수 있습니다. 이 조언을 위해 투표하기 위해 계정을 만들었습니다.
user340352
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.