Не может выяснить то, к чему относится ошибка

Это - код до сих пор:

#! /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

Когда я тестирую его, я получаю ошибку:

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

Я думал, что необходимо было поместить "сделанный" в конце выбора. Что я делаю неправильно?

1
задан 26 October 2015 в 23:35

2 ответа

Ваш if..fi конструкция имеет неправильное ключевое слово.

нет никакого ключевого слова как else if в bash, это должно быть elif. Таким образом, проблема - Вы, имеют два else if ключевые слова в Вашем коде, meke их как:

if ....; then
  ## something

elif ....; then
  ## something

elif ....; then
  ## something

else
  ## something
fi
2
ответ дан 7 December 2019 в 13:52

Ошибка не имеет никакого отношения к "сделанному" оператору; это - общий тип ошибки, указывающей, что интерпретатор добрался в конец, но не ожидал добираться там все же. Таким образом, это ожидало разделитель для предыдущего оператора, но добралось в конец, никогда не получая то, что это ожидало.

я действительно не думаю, что должен сказать Вам точную ошибку как нахождение, что ошибки являются важной частью обучения программировать. Действительно, у Вас должно теперь быть достаточно информации для нахождения его, но я буду давать еще одну подсказку и советовать Вам проверять все Ваш, если операторы для проверки они завершат правильно

0
ответ дан 7 December 2019 в 13:52

Другие вопросы по тегам:

Похожие вопросы: