有時執行腳本時會報錯: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」符號,表示的是符。