zoukankan      html  css  js  c++  java
  • SHELL脚本“syntax error: unexpected end of file”解决方案[半原创]

    目前发现运行shell脚本时, 出现"syntax error: unexpected end of file"的情况有三种, 第三种应该有很多变异的情况

    第一种, 常说的window下编写的shell脚本, 放到linux下运行会出现这种报错, 因为win下编写的shell脚本的格式是dos格式的, 这情况网上的解决办法有很多,如下:

    如果确实是这种情况,在windows下写好了Shell 但是在linux下用:
    sh -n [filesName]  检查语法总是出一个错误 syntax error:unexpected end of file
    原因如下:
    dos文件传输到unix系统时,会在每行的结尾多一个^M,在vi的时候,当你用如下命令:
    vi dos.txt
    :set fileformat=unix
    :w
    就会看到这些存在于每行结尾的^M符号,这个就是产生syntax error:unexpected end of file的原因
    解决方案:
    在vi下把这些^M都删除后即可。
    也可以使用Linux下的工具:dos2unix也可轻松将一个windows下的文本文件转化为Unix兼容的格式。

    第二种情况(copy)

    不是由于windows和Linux相互拷贝文件而导致的。这个是语法错误嘛,由于我这个shell脚本有点大,看了一阵子也没发现是那句话语法错误了,所以不得不用二分法来查找原因,不断注释一些代码,然后用sh -n test.sh来做语法检查,直到最后找到那一段或者哪一行代码引起的错误。我发现是下面这行代码引起的,你能看出其中的问题吗?^_^
    [ -d /home/repo/${SPPATH} ] || { mkdir -p /home/repo/${SPPATH}; cd /home/repo/${SPPATH}; git init >> $GITLOG 2>&1 }
    嗯,其实我用花括号{}是想把几个命令组合起来在当前shell中执行,然后我犯了一个语法错误,在最后的一个命令后没有加分号(;)。将这行改为如下即可(添加一个最后的分号):
    [ -d /home/repo/${SPPATH} ] || { mkdir -p /home/repo/${SPPATH}; cd /home/repo/${SPPATH}; git init >> $GITLOG 2>&1; }
    关于当前shell中执行一组命令,特别要注意的是,在”{“的右边 和”}“的左边,至少要间隔一个以上的空格,而且每个命令都要以分号(;)作为结尾。

    第三种情况(low)

      虽然很low, 但还是觉得有必要记录一下!

      那就是, 当你的shell脚本有语法问题的时候, 也会导致报同样的错, 这么说来, 和第二种情况是一样的......(不管了, 就当是第二种情况的一个分支吧)

      看下面的代码, 你能发现么, (估计都新手都能发现 ^^)

      test()

      {  echo "test shell script";  }

      test()

      这里, 其实有shell语法错误, 因为调用方法时, 是不需要括号的"()", 因为这个语法错误, 所以这个脚本跑不了, 所以只需要将这个括号"()" 去掉就可以了

        test(){  echo "test shell script";  }

      test

      同样, 可能在其它情况下, 不满足shell脚本的语法要求的话, 也有很大可能会出现同样的情况, 

      

      总结: 现在学的语言太多了, 各种语言之间有很多相似的地方, 上面代码会加括号, 就是因为写java, C语言写多了, 习惯了, 容易将各种语言之间的语法混淆, 以后要注意了~~~

    参考文章:http://smilejay.com/2011/08/unexpected-end-of-file/

  • 相关阅读:
    javaweb基础笔记(2)
    javaweb基础笔记(1)
    java基础笔记(11)
    java基础笔记(10)
    java基础笔记(9)
    洛谷 P2648 赚钱
    AcWing 走廊泼水节 题解
    对于有向图多个点到一个点的求法
    分层图的四倍经验
    洛谷 P4822 [BJWC2012]冻结
  • 原文地址:https://www.cnblogs.com/vitoboy/p/7542095.html
Copyright © 2011-2022 走看看