注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

笑遍世界@网易博客

明天还会在路上……

 
 
 

日志

 
 
关于我

Stay hungry, stay foolish. 工作用脑,生活用心! 走过山重水复,必然迎来柳暗花明! 受苦的人没有悲观的权利,远征的人没有流泪的资格。 Live each day as if we should die tomorrow.

网易考拉推荐
 
 

shell脚本“syntax error:unexpected end of file”解决方案  

2011-08-28 12:53:18|  分类: 编程技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天在写Shell时,运行时出现了这样的错误。
git-sync-tree.sh_temp: line 111: syntax error: unexpected end of file

网上Google了一下,网上都是说从windows下脚本传到Linux上可能会出现这样的问题,是因为Windows和Linux下的行末结束符是不一样的,曾经写过一篇博客:回车与换行的区别    当然,我今天遇到的不是这种情况导致的。

1. 如果确实是这种情况,在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兼容的格式。

2.我遇到的不是这样由于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中执行一组命令,特别要注意的是,在”{“的右边 和”}“的左边,至少要间隔一个以上的空格,而且每个命令都要以分号(;)作为结尾。
  评论这张
 
阅读(23376)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017