이것은 Bash의 매우 간단한 스크립트입니다. 코드는 다음과 같습니다.
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
sh file.sh를 실행 한 후 :
구문 오류 : 예기치 않은 파일 끝
답변
file.sh에는 CRLF 줄 종결자가 있다고 생각합니다.
운영
dos2unix file.sh
그러면 문제가 해결됩니다.
다음과 같이 우분투에 dos2unix를 설치할 수 있습니다.
sudo apt-get install dos2unix
답변
확인해야 할 또 다른 사항은 다음과 같습니다.
- 세미콜론으로 한 줄 함수의 본문을 종료합니다.
즉,이 순진한 스 니펫은 동일한 오류를 발생시킵니다.
die () { test -n "$@" && echo "$@"; exit 1 }
멍청한 파서를 행복하게 만들려면 :
die () { test -n "$@" && echo "$@"; exit 1; }
답변
또한 if
절 에서 잘못된 구문을 사용 하여이 오류 메시지를 받았습니다.
else if
(구문 오류 : 예기치 않은 파일 끝)elif
(올바른 구문)
작동 할 때까지 비트를 주석 처리하여 디버깅했습니다.
답변
닫히지 않은 if => fi 절도 이것을 발생시킵니다.
팁 : 스크립트가 큰 경우 트랩을 사용하여 디버그하십시오.
예 :
set -x
trap read debug
답변
StackOverflow의 비슷한 문제 에서이 답변을 얻었습니다.
Vim에서 파일을 열고
:set fileformat=unix
eh 라인 엔딩을 유닉스 엔딩으로 변환하고 문제가 해결되는지 확인하십시오. Vim에서 편집하는 경우 : set fileformat = unix 명령을 입력하고 파일을 저장합니다. 다른 여러 편집기는 Notepad ++ 또는 Atom과 같은 줄 끝을 변환하는 기능이 있습니다.
감사합니다 @lemongrassnginger
답변
cygwin에서 나는 다음이 필요했습니다.
export SHELLOPTS
set -o igncr
.bash_profile. 이렇게하면 unix2dos를 실행할 필요가 없었습니다.
답변
그래서 나는이 게시물을 찾았고 답변이 도움이되지 않았지만 왜 오류가 발생했는지 알아낼 수있었습니다. 나는
cat > temp.txt < EOF
some content
EOF
문제는 위의 코드를 함수에 복사하고 실수로 코드를 탭한 것입니다. 마지막 EOF가 탭으로되어 있지 않은지 확인해야합니다.