O que está causando o “erro de sintaxe próximo do token inesperado 'do'” e como posso corrigi-lo?

0

Continuo recebendo este erro:

./install.sh 
./install.sh: line 28: syntax error near unexpected token 'do'
./install.sh: line 28: '                do'

Ao executar este código (um trabalho em andamento):

# 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;

Como você provavelmente pode ver acima, estou tentando criar um menu que me permita escolher em uma lista de pastas globbed; infelizmente, não consigo descobrir por que meu do aninhado está criando o erro que eu postei acima.

Idealmente, o usuário pode escolher em uma lista de diretórios; se eles digitarem q , o programa será encerrado; se eles fizerem uma seleção inválida, o programa faz com que escolha novamente até escolher uma seleção válida (ou digite q para sair / sair).

Ainda não consegui descobrir a parte de desistir completamente, mas antes de poder fazer isso, preciso passar este erro de instrução do .

Pergunta: O que está causando o syntax error near unexpected token 'do' e como posso corrigi-lo?

    
por mhulse 24.02.2016 / 07:15

2 respostas

6

Condição de loop ausente

Sua sintaxe é inválida. Você pode ter outros problemas com seu código também, mas esta mensagem provavelmente vem do fato de que você não pode ter uma palavra-chave do como se fosse um bloco; você precisa ter um dos condicionais de loop também.

Você tem atualmente:

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

Você está perdendo uma palavra-chave for , while ou until para iniciar o loop.

    
por 24.02.2016 / 07:27
1

Em geral, quando recebo esse tipo de erro (sem correspondência if / else, do, while, etc) e não consigo encontrar o código incorreto, faço um backup do script e começo a excluir partes do código entre qualquer blocos até que eu tenha apenas um esqueleto de estruturas de controle e isso geralmente me ajuda a encontrar a palavra-chave que está faltando.

    
por 24.02.2016 / 23:28

Tags