Linux bash中出现意外的文件结束错误

Linux bash中出现意外的文件结束错误,linux,bash,Linux,Bash,在我为家庭作业编写的这个简单bash脚本的第47行中,我不断遇到意外的文件结尾错误。在我删除了链中的一条if语句之前,它一直工作得很好,但没有做任何事情。我已经尝试修复这个错误30分钟了,但运气不好。我在我的windows vim编辑器中弄乱了设置,尝试了3个不同的ftp客户端,并且多次查看了我的代码。希望其他人检查一下,会发现一些我以前没有发现的愚蠢错误。我也知道这不是最干净的代码,但这是我第一次尝试bash脚本,我有点匆忙 #! /bin/bash # A simple co

在我为家庭作业编写的这个简单bash脚本的第47行中,我不断遇到意外的文件结尾错误。在我删除了链中的一条if语句之前,它一直工作得很好,但没有做任何事情。我已经尝试修复这个错误30分钟了,但运气不好。我在我的windows vim编辑器中弄乱了设置,尝试了3个不同的ftp客户端,并且多次查看了我的代码。希望其他人检查一下,会发现一些我以前没有发现的愚蠢错误。我也知道这不是最干净的代码,但这是我第一次尝试bash脚本,我有点匆忙

    #! /bin/bash
    # A simple command to classify triangle type

    if [[ -n $1 && -n $2 && -n $3 ]]
    then
        if [[ -z $4 && -z $5 && -z $6 && -z $7 && -z $8 && -z $9 ]]
        then
        let a=$1
        let b=$2
        let c=$3
            if [[ a -gt 0 && b -gt 0 && c -gt 0 ]]
        then
                if [[ $((a+b)) -gt c && $((b+c)) -gt a && $((a+c)) -gt b ]]
            then
            if [[ a -eq b || a -eq c || b -eq c ]]
                then
                    if [[ a -eq b && a -eq c && b -eq c ]]
                then
                echo "This is an equilateral triangle"
                elif [[ ( a -eq b && a -ne c ) || ( b -eq c && b -ne a ) || ( a -eq c && b -ne c ) ]]
                    then
                    echo "This is an isosceles triangle"
                fi
            elif [[ a -ne b && a -ne c && b -ne c ]]
                then
                        let x=$((a**2+b**2-c**2))
                        let y=$((a**2+$c*2-b**2))
                        let z=$((b**2+c**2-a**2))
                if [[ x -eq 0 || y -eq 0 || z -eq 0 ]]
                then
                echo "This is a right triangle"
                else
                echo "This is a scalene triangle"
                fi
            else
            echo "Invalid triangle: sum of smaller sides greater than largest side"
            fi
        else
            echo "Invalid triangle: 0, negative, or non-integer entered"
            fi      
        else
        echo "Invalid triangle: too many arguments"
        fi  
    else
        echo "Invalid triangle: missing argument"
    fi
编辑:在把这个块粘贴到我的帖子中之后,每隔一段时间就会出现随机的标签而不是空格,我不知道为什么。这真令人沮丧


编辑2:我花了7个小时摆弄这个该死的脚本,终于让它正常工作了。谢谢你们的帮助。

试着正确缩进代码,这样你就会发现缺少了一些块。我是以一种非常普遍的方式做的,我发现有一个:

#! /bin/bash
# A simple command to classify triangle type

if [[ -n $1 && -n $2 && -n $3 ]] #block1
then
    if [[ -z $4 && -z $5 && -z $6 && -z $7 && -z $8 && -z $9 ]] #block2
    then
        if [[ a -gt 0 && b -gt 0 && c -gt 0 ]] #block3
        then
            if [[ $((a+b)) -gt c && $((b+c)) -gt a && $((a+c)) -gt b ]] #block4
            then
                if [[ a -eq b || a -eq c || b -eq c ]] #block5
                then
                    if [[ a -eq b && a -eq c && b -eq c ]] #block6
                    then
                    elif [[ ( a -eq b && a -ne c ) || ( b -eq c && b -ne a ) || ( a -eq c && b -ne c ) ]]
                    then
                    fi
                elif [[ a -ne b && a -ne c && b -ne c ]] #block5
                then
                   if [[ x -eq 0 || y -eq 0 || z -eq 0 ]] #block6
                   then
                   else
                   fi
                else
                fi
            else #block4
            fi
        else #block3
        fi  
    else #block2
    fi
##### missing one if block

有一个失踪的fi。尝试更正脚本的索引,您将看到缺少的fi。

通常是:一个打开的“或”没有结束(或导致语句没有结束)直到文件结束…使用emacs编辑器来解决这些问题显然我的windows vim编辑器添加了各种各样的换行符、制表符和奇怪的空格。有没有一种简单的方法来修复所有的缩进,因为这真的开始磨我的齿轮了。Mmmm@Izzytoots我恐怕没有(我在谷歌上搜索了一点,没有找到任何)。要发布我的答案,我只需打开编辑器并手动添加选项卡。如果你然后复制文本并粘贴到vim中,应该可以。我会试试。我认为问题的主要部分是我真的不明白换行符、选项卡或空白对bash脚本意味着什么。所有这些都没有在讲座中讨论过,我也没有教科书,所以我没有要从google学习bash语法,我仍然不知道我在做什么。@Izzytoots标签对bash没有任何意义,它只是帮助你更好地理解代码而已!。关于新行,它与
相同。因此
echo“hello”;echo“bye”
echo“hello”
相同“。我建议你写一些基本的东西,一旦你觉得舒服,再添加更多的内容。例如,尝试先评估一个条件。你可以阅读像这样的教程,当然,当你有问题的时候,欢迎你在这里提问。经过7个小时的自学,bash和fidding终于完全处于工作状态。谢谢现在我可以睡觉了。。。