shell 報錯:syntax error: unexpected end of file

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

相關文章
相關標籤/搜索