「マーカー '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ループ条件の1つも必要です。

あなたは現在以下を持っています:

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

ループを開始するために必要なforwhileまたはキーワードがありません。until

おすすめ記事