이 오류가 계속 발생합니다.
./install.sh
./install.sh: line 28: syntax error near unexpected token `do'
./install.sh: line 28: ` do'
이 코드를 실행할 때(작업 진행 중):
# Set the prompt string:
PS3='Choose folder: ';
function choose() {
# This works:
#select folder;
#do test -n "$folder" && echo You chose: $REPLY\) $folder && break;
#echo 'Wrong entry, try again.';
#continue;
#done;
select folder;
do
case $folder in
'q')
echo 'Exiting …';
break;
;;
*)
do
test -n '$folder' && echo You chose: $REPLY\) $folder && break;
echo 'Wrong entry, try again.';
continue;
done;
;;
esac;
done;
}
# Switch to glob folder location:
cd ~/Desktop;
# Create menu:
choose foo*;
# Do stuff with result of choose() here ...
# Exit program:
exit 0;
do
위에서 볼 수 있듯이 전체 폴더 목록에서 선택할 수 있는 메뉴를 만들려고 합니다. 안타깝게도 중첩 시 위에 게시한 오류가 발생하는 이유를 이해할 수 없습니다 .
바람직하게는 사용자가 디렉토리 목록에서 선택할 수 있습니다. 를 입력하면 q
프로그램이 종료됩니다. 잘못된 선택을 하면 프로그램은 유효한 선택을 할 때까지(또는 Enter를 눌러 q
종료할 때까지) 다시 선택할 수 있도록 합니다.
아직 종료 부분을 파악하지 못했지만 그렇게 하기 전에 이 do
명령문 오류를 극복해야 합니다.
질문: 원인은 무엇 syntax error near unexpected token `do'
이며 해결 방법은 무엇입니까?
답변1
루프 조건 누락
구문이 잘못되었습니다. 코드에 다른 문제가 있을 수 있지만 이 메시지는 블록과 같은 키워드를 사용할 수 없다는 사실에서 비롯될 수도 있습니다. do
루프 조건 중 하나도 있어야 합니다.
귀하는 현재 다음을 보유하고 있습니다:
*)
do
test -n '$folder' && echo You chose: $REPLY\) $folder && break;
echo 'Wrong entry, try again.';
continue;
done;
;;
루프를 시작하는 데 필요한 for
, while
또는 키워드가 누락되었습니다.until
답변2
일반적으로 이러한 유형의 오류(일치하지 않는 if/else, do, while 등)가 발생하고 문제가 되는 코드를 찾을 수 없으면 스크립트를 백업하고 찾을 때까지 그 사이의 코드 블록을 제거하기 시작합니다. 제어 구조 뼈대만 있으면 일반적으로 누락된 키워드를 찾는 데 도움이 될 수 있습니다.