您的位置:首页 > 电脑网络 > 电脑配件 > syntax error near unexpected token ****

syntax error near unexpected token ****

luyued 发布于 2011-04-17 15:13   浏览 N 次  

  shell 脚本,在调试时,FOR循环那行代码,总是出现错误syntax error near unexpected token '$'\r''

  悬赏分:30 | 解决时间:2011-2-18 16:55 | 提问者:Paladinling

  代码是NUTCH 1.0的recrawl脚本已经指向bin/bash 附上出错的代码行for((i=0;i<$depth;i++))以及前后echo "----- Generate, Fetch, Parse, Update (Step 2 of $steps) -----"for((i=0;i<$depth;i++))do echo "--- Beginning crawl at depth `expr $i + 1` of $depth ---" $NUTCH_HOME/bin/nutch generate crawl/crawldb crawl/segments $topN \ -adddays $adddays if [ $? -ne 0 ] then echo "runbot: Stopping at depth $depth. No more URLs to fetch." break fi segment=`ls -d crawl/segments/* | tail -1`

  问题补充:

  不能解决,错误提示是bin/runbot:line 49:syntax error near unexpected token '$'\r'''in/runbot:line 49: 'for((i=0;i<$depth;i++))line 49代码就是for((i=0;i<$depth;i++))换号符错误,还是句式上有什么问题语法检查都试过 就是line 49这个错误 难道是我的cygwin跟WIN7 系统的问题

  解决方法:

  long long ago..... 老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,,ASCII码为0D),另一个字符把纸上移一行 (称为换行, ,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是。Apple 开发者规定了用。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的

  因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是符。

  这种情况发生的原因是因为你所处理的文件换行符是dos格式的"\r\n"可以使用cat -v 文件名 来查看换行符是否是,如果是上述的,则行结尾会是^m需要转换成linux/unix格式的"\n"具体转换办法就是转换换行符可以用sed命令处理一下文件,命令如下:sed 's/\r//' 原文件 >转换后文件

  解决办法:

  1)vi -b back.sh

  2)%s/^M//g

  ///////注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”

图文资讯
广告赞助商