sh腳本中變量$的坑

最近想寫一個shell腳本以解決項目中手動操作的部分工作。

tomcat_home=/data/app/apache-tomcat-6.0.35-portal
SHUTDOWN=$tomcat_home/bin/shutdown.sh
STARTUP=$tomcat_home/bin/startup.sh

如上,不論怎麼輸出都提示沒有文件路徑,搞了半天終於發現。$變量其實是,末尾默認加一個/r,將光標移到首位。導致路徑出錯。

 

在windows上用notepadd++編輯一個shell腳本,死活出錯,回到linux下,編輯,還是有這個\r,搜索了下,是這樣的:

由於在shell處理了windows裏的字符文件,導致本該輸出成兩行的字符串變成了一行,而第一行行首的一些字符被第二行覆蓋了

這是由於windows和linux下的/r ^M 字符的區別導致,可以將異常字符都篩選掉再進行輸出:如sed 's/[^0-9,.:A-Za-z]//g'把不符合規則的字符過濾掉

轉載了下面的可以參考下:

 

Unix體系裏,每行結尾只有“<換行>”,即“\n”;Windows體系裏面,每行結尾是“<換行><回 車>”,即“\n\r”。一個直接結果是,Unix體系下的文件在Windows裏打開的話,所有文字會變成一行;而Windows裏的文件在Unix下打開的話,在每行的結尾可能會多出一個^M符號。

 

 

 

好了,所以我的題目就出在被處理懲罰的文件的每行末尾都有^M符號,而這凡是是看不出來的。可以用"cat -A test.file"號令查看。是以當我想在行尾添加字符的時辰,它老是添加在行首且會覆蓋掉本來行首的字符。

 

要把文件轉換一下,有兩種辦法:

1.在Linux下用vi重新編寫。絕對不會出錯。

2.號令dos2unix test.file

 

3.去掉"\r" ,用號令sed -i ""s/\r//"" test.file

 

好了,如許處理懲罰完,就OK啦!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章