syntax error near unexpected token `$’do\r”报错解决

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

问题描述

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


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


文件格式区别:

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

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

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

dos为: : /r/n

mac为: : /r

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

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

202305100132118644790000

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

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

202305100131541510790000

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

202305100131402171050000

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

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

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

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

dos2unix *.sh

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

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


————————————————
版权声明:本文为CSDN博主「编程之间」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/limm33/article/details/5304398

计算机