syntax error near unexpected token 脚本报错误解决

栏目: 服务器 · 发布时间: 7年前

内容简介:syntax error near unexpected token 脚本报错误解决

向朋友要了一个 Shell 脚本来在 Linux 试用,发现执行时就报错:syntax error near unexpected token,仔细查找了还是没找到错误,后来发现脚本内容每行尾行都添加了^M的字符,查看方式:vi -b 打开脚本文件

后来想了下,造成这个的原因应该是脚本有试过拿到Win机器上存放,期间也用Win下的编辑器编辑过。

syntax error near unexpected token 脚本报错误解决

现在简单整理如下:

使用vim -b命令查看文件内容如下:

syntax error near unexpected token 脚本报错误解决

每一行多了一个^M有木有?

那么接下来就要搞清楚这个^M是什么东东?

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

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

基本解决方法有三个:

1.用vim编辑器替换

vim -b filename

在命令模式下执行%s/^M//g进行替换

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

2.使用dos2unix命令进行转换

Dos2unix在有些版本的系统中默认是安装的。

在Linux中,文本文件用"\n"表示回车换行,而Windows用"\r\n"表示回车换行。所以在Linux中使用Windows的文本文件常常会出现错误。为了避免这种错误,Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把"\r\n"转化成"\n",unix2dos把"\n"转化成"\r\n"。

命令dos2unix和unix2dos的使用非常简单,格式为:dos2unix filename

如果想了解更多,可以查看手册。man dos2unix

3.使用文本处理工具

cat filename | tr -d "/r" > newfile 去掉^M生成一个新文件。

同样还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的。

另外,在上传到Linux平台过程中,可以选择上传类型为二进制,也可以避免此问题,大家可以试一下

syntax error near unexpected token 脚本报错误解决

本文永久更新链接地址 http://www.linuxidc.com/Linux/2017-06/144756.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

U一点·料

U一点·料

阿里巴巴集团 1688用户体验设计部 / 机械工业出版社 / 2015-7-13 / 79.00元

《U一点·料——阿里巴巴1688UED体验设计践行之路》是1688UED团队历经多年实践之后的心血之作,书中以“道─术─器”的思路为编排脉络,从设计观、思考体系、方法论上层层剖析,将零散的行业knowhow串成体系,对“UED如何发展突破”提出了自己的真知灼见。该书重实战、讲方法、求专业、论文化,是一部走心的诚意之作。 本书作者从美工到用户体验设计师,从感性随意到理性思考,从简单的PS做图到......一起来看看 《U一点·料》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具