syntax error near unexpected token `$’do\r”报错问题

原创 2016年11月05日 11:07:24

不知道大家有没有在windows上面编写shell脚本,然后部署到linux上运行的经历,如果你做过类似的事情,那你可能遇到过这个问题:syntax error near unexpected token `$’do\r”,或者类似的问题。

问题描述

 运行shell脚本shell脚本,运行出错:syntax error near unexpected token `$’do\r


 问题原因:Linux和windows下的回车换行符不兼容


    文件格式区别:

    我们先看看这三个者有何区别。很久以前,人们用老式的电传打字机作为输入设备,它使用

两个字符来另起新行。一个字符把滑动架移回首位 (称为回车:<CR>,另一个字符把纸上移一行
(称为换行:<LF>)

       
当计算机问世后,由于存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。于是
UNIX 开发者决定他们可以用<Line Feed>即<LF>,一个字符来表示行尾。
Apple 开发者规定了用<CR>。
开发 MS-DOS (以及微软视窗) 的那些家伙则决定沿用老式的<CR><LF>
三种行尾格式如下:
        unix为:  <LF>      : /n

        dos为:   <CR><LF>  : /r/n

        mac为:  <CR>      : /r

所以:这也是为什么window将<CR><LF>的文件转移到unix上会出现syntax error near unexpected token `$’do\r”的原因。

  
问题解决:

1、在windows上可以用文本编辑器查看所有字符,例如notepad++,视图->显示符号->显示所有符号,如下:


在每行的结尾显示了CRLF的符号问题正是由此产生的。


2、用文本编辑器解决办法,eclipse等编辑器都可以解决,拿notepad++来说,编辑->档案格式转换->转换为UNIX格式:


 

进行转换之后就成了如下:


再放到linux上运行就不会出现以上报错了。

3、使用dos2unix工具进行处理。

再linux上安装dos2unix工具:sudo apt-get install dos2unix(根据系统使用不同命令安装)

安装成功后可以定义一个shell脚本,或者手动执行一下命令

dos2unix  *.sh

就会看到:dos2unix: converting file eval1.sh to Unix format ...

就将这个文件转换为了linux下的执行文件了。


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/limm33/article/details/53043988

解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi'错误的问题

我们在编辑Linux服务器上的文件时,如果直接在Linux环境下编辑的话,比较麻烦,大段粘贴格式比较乱,还得自己一行一行去调整,因此会选择用编辑器来编辑我们Linux环境下的文件,我用的是NodePa...
  • u012453843
  • u012453843
  • 2017-04-09 12:25:22
  • 11030

shell编程报错:“syntax error near unexpected token `”

         今天写了个shell脚本,在自己机器上运行正常,给同事,运行报错syntax error near unexpected token `,左看右看shell脚本没有问题,没有办法go...
  • xyp84
  • xyp84
  • 2009-08-11 19:12:00
  • 71770

syntax error near unexpected token `newline'脚本无法执行

确定文件格式问题,与去除脚本文件^M$ 办法
  • yuechang5
  • yuechang5
  • 2016-12-30 17:29:57
  • 10441

编译内核出现错误提示:line 0:syntax error near unexpected token '('

编译内核出现错误提示:/bin/sh: -c :line 0:syntax error near unexpected token '(' 参考资料如下: Why do I receive...
  • shanshui90
  • shanshui90
  • 2013-04-14 14:10:24
  • 1677

Linux下hello world报错syntax error near unexpected token `(' ,int main()

hello world代码很简单,结果放到Linux下跑,居然报错,syntax error near unexpected token `(' ,int main() 最后从国外的网站Linux论...
  • salmonwilliam
  • salmonwilliam
  • 2017-09-29 15:08:35
  • 291

syntax error near unexpected token `then'问题的解决

#!/bin/bash #if program test echo 'a:' read a if  [  "$a"  =  "English"  ];then echo "right"...
  • caihongshijie6
  • caihongshijie6
  • 2013-12-22 18:38:00
  • 4085

脚本报syntax error near unexpected token `(',

本来可以跑的脚本,最近忽然在运行时报syntax error near unexpected token `(',,但代码语法看起来并没有什么明显的错误 。 怀疑是用特殊字符造成的,使用"vi -b...
  • xcltapestry
  • xcltapestry
  • 2014-03-25 20:47:30
  • 8338

关于报错“syntax error near unexpected token `”和回车换行

关于报错“syntax error near unexpected token `”和回车换行    用命令vi -b 打开你的SHELL脚本文件,你会。发现每行脚本最后多了个^M。   那...
  • gcn_11
  • gcn_11
  • 2016-01-23 21:23:22
  • 561

shell “syntax error near unexpected token '$'\r''” 错误解决方法

这种情况发生的原因是因为你所处理的文件换行符是dos格式的"\r\n"。 可以使用cat -v 文件名 来查看换行符是否是,如果是上述的,则行结尾会是^m。 需要转换成linux/...
  • piaoxuefengqi
  • piaoxuefengqi
  • 2014-02-28 16:22:52
  • 3067

运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”

运行shell脚本提示“syntax error near unexpected token for((i=0;i
  • yeweiouyang
  • yeweiouyang
  • 2014-06-18 11:35:23
  • 3007
收藏助手
不良信息举报
您举报文章:syntax error near unexpected token `$’do\r”报错问题
举报原因:
原因补充:

(最多只允许输入30个字)