BASH - 意外令牌'完成'附近的语法错误

时间:2016-07-02 12:55:05

标签: bash shell terminal

我是bash编程的新手,我正在尝试编写脚本。到目前为止,这是非常简陋的,但我最后得到了done的上述错误。

for ((i = 1; i < 13; i++)) do
    if [ "$i" -lt "4" ]; then
        touch Block1/B8IT11"$i".txt
        echo B8IT11"$i" created
    else if [ "$i" -gt "3" -a  "$i" -lt "7" ]; then
        touch Block2/B8IT11"$i".txt
        echo B8IT11"$i" created
    else if [ "$i" -lt "6" -a  "$i" -lt "10" ]; then
        touch Block3/B8IT11"$i".txt
        echo B8IT11"$i" created
    else
        touch Block4/B8IT11"$i".txt
        echo B8IT11"$i" created
    fi
done

在我看来,我无法看到问题,因为if-else if-elsefi结尾,for循环应以done结束。

我已完成cat -v甚至dos2unix。有没有人看到我失踪的东西?

2 个答案:

答案 0 :(得分:1)

bash中没有else if。你拥有的是else后跟一个(嵌套的)if构造。外部else未终止(缺少fi)。 Bash认为您仍处于else区域内,因此此时此刻并不期待done

for ((i = 1; i < 13; i++)) do
    if [ "$i" -lt "4" ]; then
        touch Block1/B8IT11"$i".txt
        echo B8IT11"$i" created
    else
        if [ "$i" -gt "3" -a  "$i" -lt "7" ]; then
            touch Block2/B8IT11"$i".txt
            echo B8IT11"$i" created
        else
            if [ "$i" -lt "6" -a  "$i" -lt "10" ]; then
                touch Block3/B8IT11"$i".txt
                echo B8IT11"$i" created
            else
                touch Block4/B8IT11"$i".txt
                echo B8IT11"$i" created
            fi
            done

修正:将您的所有else if更改为elif

答案 1 :(得分:1)

在bash中else if用作elif。你可以试试这个: -

for ((i = 1; i < 13; i++)) do
    if [ "$i" -lt "4" ]; then
        touch Block1/B8IT11"$i".txt
        echo B8IT11"$i" created
    elif [ "$i" -gt "3" -a  "$i" -lt "7" ]; then
        touch Block2/B8IT11"$i".txt
        echo B8IT11"$i" created
    elif [ "$i" -lt "6" -a  "$i" -lt "10" ]; then
        touch Block3/B8IT11"$i".txt
        echo B8IT11"$i" created
    else
        touch Block4/B8IT11"$i".txt
        echo B8IT11"$i" created
    fi
done