1. 程式人生 > >shell 報錯:syntax error: unexpected end of file

shell 報錯:syntax error: unexpected end of file

not app 文件格式 解決方案 編輯 window 曾經 command exp

有時執行腳本時會報錯:

[[email protected] shell]# sh -x test.sh 
+ $\r
: command not found
test.sh: line 37: syntax error: unexpected end of file

原因可能是:

文本編輯是在windows下通過記事本或其它編輯器編寫的這個文件,運行 在cygwin模擬LINUX軟件環境下。

解決思路:

DOS下文件和Linux下文件格式差異問題導致的。

DOS下的文本文件是以\r\n作為斷行標誌的,表示成十六進制就是0D 0A。而Unix下的文本文件是以\n作為斷行標誌的,表示成十六進制就是0A。

【在windows裏,換行用的兩個符號,回車\r,換行符號\n,在linux下只需一個符號\n就可以了.】

DOS格式的文本文件在Linux下,用較低版本的vi打開時行尾會顯示^M,當然也有可能看不到,但是在vi的時候,會在下面顯示此文件的格式,"M.txt" [dos] 8L, 72C表示是一個dos文件格式。

解決方案:

使用下面的命令將文件格式設置為unix格式即可解決上述錯誤。

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”符號,表示的是符。

shell 報錯:syntax error: unexpected end of file