歡迎您光臨本站 註冊首頁

Linux下case報錯syntax error near unexpected token `in

←手機掃碼閱讀     火星人 @ 2014-03-26 , reply:0

  本來在linux下寫了個安裝jdk和tomcat的sh腳本,當時運行非常沒有問題。過後,放在windows下存放了一段時間,

  現在又拿到linux執行,運行時卻報錯「syntax error near unexpected token `in」。

  難道過了一段時間變質了?不過確實是變質了。windows下,我曾經打開過這個文檔,造成文檔成了dos下的格式。(開來這玩意跟食物一樣不能隨便打開)。操作上可以如下驗證文檔。

  在保證語法正確的情況下:

  1.新建一個a.sh文件。在其中寫入幾行腳本保存。

  2.用命令vi -b a.sh你會看到的內容和用 vi a.sh看到的內容一樣。

  3.現在同樣的比較下我原來的文檔。發現每行腳本最後多了個^M。

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

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

  因為MS-DOS及Windows是回車+換行來表示換行,因此在Linux下用Vim查看在Windows下用VC寫的代碼,行尾后的「^M」符號,表示的是符。

  在Vim中解決這個問題,很簡單,在Vim中利用替換功能就可以將「^M」都幹掉,鍵入如下替換命令行:

  1)vi -b setup.sh

  2)在命令編輯行<就是: 按ESC鍵 然後shift+:冒號>輸入:%s/^M//g

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

  這樣替換掉以後,保存就可以執行了。當然還有其他的替換方式比如:

  a.一些linux版本有 dos2unix 程序,可以用來祛除^M。

  b.cat filename1 | tr -d "\r" > newfile 去掉^M生成一個新文件,還有sed命令等,凡是可以替換的命令都是可以用來新生成一個文件的。

[火星人 ] Linux下case報錯syntax error near unexpected token `in已經有687次圍觀

http://coctec.com/docs/linux/show-post-187178.html