syntax error near unexpected token(關於跨平臺非法字符(^M)的解決方法)

別人寫了一個shell拿過來在linux試用,執行報錯以下:html

wKioL1hftLrS_aDtAAAXvl4nfLI120.png

仔細查找了仍是沒找到錯誤,一直都是報syntax error near unexpected token `{linux

網上搜索了一下,找到了端倪,如今簡單整理以下:shell

 

如今能夠判斷給我腳本的這位仁兄頗有多是在windows平臺上編寫的。使用vim -b命令查看文件內容以下:vim

wKioL1hftMvAGbJxAACUVoVNPLE714.png 

每一行多了一個^M有木有?windows

那麼接下來就要搞清楚這個^M是什麼東東?編輯器

long long long ago .....  老式的電傳打字機使用兩個字符來另起新行。一個字符把滑動架移回首位 (稱爲回車,<CR>ASCII碼爲0D),另外一個字符把紙上移一行 (稱爲換行, <LF>ASCII碼爲0A)。當計算機問世之後,存儲器曾經很是昂貴。有些人就認定不必用兩個字符來表示行尾。UNIX 開發者決定他們能夠用 一個字符來表示行尾,Linux沿襲Unix,也是<LF>Apple 開發者規定了用<CR>。開發 MS-DOS以及Windows 的那些傢伙則決定沿用老式的<CR><LF>ide

由於MS-DOSWindows是回車+換行來表示換行,所以在Linux下用Vim查看在Windows下用VC寫的代碼,行尾後的「^M」符號,表示的是換行符。工具

基本解決方法有三個:spa

1.vim編輯器替換.net

 vim -b filename

 在命令模式下執行%s/^M//g進行替換

 注意:上述命令行中的^M」符,不是「^」再加上「M」,而是由「Ctrl+v」、「Ctrl+M」鍵生成的。

2.使用dos2unix命令進行轉換

 Dos2unix在有些版本的系統中默認是安裝的。

 Linux中,文本文件用"\n"表示回車換行,而Windows"\r\n"表示回車換行。因此在Linux中使用Windows的文本文件經常會出現錯誤。爲了不這種錯誤,Linux提供了兩種文本格式相互轉化的命令:dos2unixunix2dosdos2unix"\r\n"轉化成"\n"unix2dos"\n"轉化成"\r\n"
     命令dos2unixunix2dos的使用很是簡單,格式爲:dos2unix filename

   若是想了解更多,能夠查看手冊。man dos2unix

3.使用文本處理工具

 cat filename | tr -d "/r" > newfile 去掉^M生成一個新文件。

一樣還有sed命令等,凡是能夠替換的命令都是能夠用來新生成一個文件的。

 

另外,a.windows平臺上經過notepad++工具也能夠完成轉換,具體參考百度經驗http://jingyan.baidu.com/article/9f63fb91d014b8c8410f0e7a.html

 

b.在上傳到linux平臺過程當中,能夠選擇上傳類型爲二進制,也能夠避免此問題,你們能夠試一下

 

wKiom1hftO7B9yxFAADrSoQTDbg234.png

A.

B.

相關文章
相關標籤/搜索