情景:
同樣的的指令碼,在不同的機器下執行有的可以成功,有的執行失敗,
前提:sh指令碼windos下編輯過。
指令碼在windows上修改之後,在每行尾部多了個 ^m,導致sh指令碼在執行的時候可能shbang解析不了,導致指令碼執行不了
報錯 syntax error: 「(」 unexpected (expecting 「then」) 語法解析錯誤
解決:在linux檢視^m,需要使用如下命令:
vim下 :e ++ff=unix %
去掉^m的方法:
1.在 vim 的命令模式中輸入 :%s/^m$//g 後,回車即會自動刪除該檔案中的所有 ^m 字元。
^m 注意要用 ctrl + v ctrl + m 來輸入
2.cat filename1 | tr -d "\r" > newfile
3. sed -e "s/vm//" filename > outputfilename
4.tr -d '\015' < filename> newfile
簡單的,直接使用dos2unix, 將dos下的檔案轉換成unix檔案,可以將後面的^m去掉。
sh指令碼的dos和unix
最近集群遷移,新給的客戶端執行sh,報錯,找到了一篇很好的文章 雖然很簡單,但是之前都不知道這些檢視命令,學習了 在執行shell指令碼時提示這樣的錯誤主要是由於shell指令碼檔案是dos格式,即每一行結尾以 r n來標識,而unix格式的檔案行尾則以 n來標識。檢視指令碼檔案是dos格式還是un...
linux 下 sh 檔案語法
介紹 1 開頭 程式必須以下面的行開始 必須方在檔案的第一行 bin sh 符號 用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用 bin sh來執行程式。當編寫指令碼完成時,如果要執行該指令碼,還必須使其可執行。要使編寫指令碼可執行 編譯 chmod x filename 這樣...
linux 下 sh 檔案語法
介紹 1 開頭 程式必須以下面的行開始 必須方在檔案的第一行 bin sh 符號 用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用 bin sh來執行程式。當編寫指令碼完成時,如果要執行該指令碼,還必須使其可執行。要使編寫指令碼可執行 編譯 chmod x filename 這樣...