无法弄清楚错误指的是什么

无法弄清楚错误指的是什么

这是迄今为止的代码:

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

我以为你必须在选择末尾加上“done”。我做错了什么?

答案1

您的if..fi构造有错误的关键字。

没有像 这样的关键字else ifbash应该是elif。因此,问题是else if您的代码中有两个关键字,如下所示:

if ....; then
  ## something

elif ....; then
  ## something

elif ....; then
  ## something

else
  ## something
fi

答案2

该错误与“done”语句无关;这是一种常见的错误,表示解释器已到达末尾,但尚未到达那里。也就是说,它期望上一个语句的终止符,但却到达末尾而没有得到它所期望的东西。

我真的不认为我应该告诉你确切的错误,因为查找错误是学习编程的一个重要部分。实际上,你现在应该有足够的信息来找到它,但我再给你一个提示,并建议你检查所有的 if 语句,以确保它们正确终止

相关内容