是什么导致“意外标记‘do’附近出现语法错误”,我该如何解决?

mhu*_*lse 0 osx bash select

我不断收到此错误:

./install.sh 
./install.sh: line 28: syntax error near unexpected token `do'
./install.sh: line 28: `                do'
Run Code Online (Sandbox Code Playgroud)

运行此代码时(正在进行中):

# 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;
Run Code Online (Sandbox Code Playgroud)

正如您可能从上面看到的,我正在尝试创建一个菜单,让我可以从全局文件夹列表中进行选择;不幸的是,我无法弄清楚为什么我的嵌套do会产生我上面发布的错误。

最理想的是,用户可以从目录列表中进行选择;如果他们输入q,则程序退出;如果他们做出了无效的选择,程序会让他们再次选择,直到他们选择了一个有效的选择(或输入q退出/退出)。

我还没有完全弄清楚退出部分,但在我能做到这一点之前,我需要克服这个do语句错误。

问题:是什么导致的syntax error near unexpected token `do',我该如何解决?

Cod*_*ome 6

缺少循环条件

您的语法无效。您的代码也可能有其他问题,但此消息可能来自于您不能将do关键字视为块的事实;您还需要具有循环条件之一。

您目前拥有:

        *)
            do
                test -n '$folder' && echo You chose: $REPLY\) $folder && break;
                echo 'Wrong entry, try again.';
                continue;
            done;
            ;;
Run Code Online (Sandbox Code Playgroud)

您缺少for, while, 或until关键字来开始您的循环。