Não consigo descobrir a qual erro está se referindo

1

Este é o código até agora:

#! /bin/bash

index=0
dirs=()    
dirs[0]=$(pwd)
size=${#dirs[*]} 
dirJump=" "

select choice in quit back jump $(ls -d */); do
        echo "###########################################################"
        ls -l | egrep -v '^d' | sed -e '1 d'                                    

        if [[ $choice == "quit" ]]; then
                break
        else if [[ $choice == "back" ]]; then
                size=${#dirs[*]}           
                if (( size > 1 )); then               
                        unset dirs[$(( ${#dirs[*]}-1 ))]
                        cd ${dirs[$(( ${#dirs[*]}-1 ))]}
                fi
        else if [[ $choice == "jump" ]]; then
                echo "Enter a directory to jump to: "
                read dirJump
                if (( ${#dirs[*]} == 10 )); then 
                        unset dirs[0]
                        cd $dirJump
                        dirs[$(${#dirs[*]})]="$dirJump" 
                else 
                        cd $dirJump
                        dirs[$(${#dirs[*]})]="$dirJump" 
                fi
        else
                echo "do other things"
        fi
done

Quando eu testo, recebo o erro:

./dirNav.bash: line 35: syntax error near unexpected token 'done'
./dirNav.bash: line 35: 'done'

Eu pensei que você tinha que colocar "feito" no final de um select. O que estou fazendo errado?

    
por C. Blanchette 26.10.2015 / 21:35

2 respostas

2

Seu if..fi construct tem uma palavra-chave errada.

Não há palavras-chave como else if em bash , deve ser elif . Então, o problema é que você tem duas else if palavras-chave em seu código, faça-as como:

if ....; then
  ## something

elif ....; then
  ## something

elif ....; then
  ## something

else
  ## something
fi
    
por heemayl 26.10.2015 / 22:11
0

O erro não tem nada a ver com a declaração "done"; Esse é um tipo comum de erro indicando que o intérprete chegou ao fim, mas não esperava chegar lá ainda. Ou seja, esperava um terminador para uma declaração anterior, mas chegou ao fim sem obter o que esperava.

Eu realmente não acho que devo dizer-lhe o erro exato, pois encontrar erros é uma parte importante do aprendizado do programa. Realmente, agora você deve ter informações suficientes para encontrá-las, mas darei mais uma dica, e aconselho a verificar todas as suas declarações if para ter certeza de que elas terminam corretamente

    
por Marty Fried 26.10.2015 / 21:50