最近想寫一個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啦!!!