"마커 'do' 근처에서 예기치 않은 구문 오류가 발생했습니다."의 원인과 해결 방법은 무엇입니까?

"마커 'do' 근처에서 예기치 않은 구문 오류가 발생했습니다."의 원인과 해결 방법은 무엇입니까?

이 오류가 계속 발생합니다.

./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 등)가 발생하고 문제가 되는 코드를 찾을 수 없으면 스크립트를 백업하고 찾을 때까지 그 사이의 코드 블록을 제거하기 시작합니다. 제어 구조 뼈대만 있으면 일반적으로 누락된 키워드를 찾는 데 도움이 될 수 있습니다.

관련 정보