有时执行脚本时会报错:linux
[root@host1 shell]# sh -x test.sh + $'\r' : command not found test.sh: line 37: syntax error: unexpected end of file
缘由多是:shell
文本编辑是在windows下经过记事本或其它编辑器编写的这个文件,运行 在cygwin模拟LINUX软件环境下。windows
解决思路:编辑器
DOS下文件和Linux下文件格式差别问题致使的。spa
DOS下的文本文件是以\r\n做为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n做为断行标志的,表示成十六进制就是0A。unix
【在windows里,换行用的两个符号,回车\r,换行符号\n,在linux下只需一个符号\n就能够了.】code
DOS格式的文本文件在Linux下,用较低版本的vi打开时行尾会显示^M,固然也有可能看不到,可是在vi的时候,会在下面显示此文件的格式,"M.txt" [dos] 8L, 72C表示是一个dos文件格式。orm
解决方案:blog
使用下面的命令将文件格式设置为unix格式便可解决上述错误token
vi test.sh :set fileformat=unix :wq
为何windows下编辑的脚本直接拷贝到unix系统下没法直接运行?
linux执行SHELL脚本报错“syntax error near unexpected token `in”
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”符号,表示的是符。