cygwin下面寫shell,運行出錯:syntax error near unexpected token `$’do\r”
寫shell,運行出錯:syntax error near unexpected token `$’do\r”
【問題】
在cygwin下,用notepad++寫了個簡單的shell腳本,內容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash #remove *.bak in subfolder files echo 'remove *.bak' sub_folders=`ls` echo 'sub_folders='$sub_folders for each_item in $sub_folders; do if [ -d $each_item ]; then echo $each_item else echo $each_item "is file ------" fi done exit 0
|
但是運行出錯:
1 |
line 6: syntax error near unexpected token `$'do\r''
|
【解決過程】
1.網上搜了下,參考:linux shell腳本報錯:syntax error near unexpected token `
然后去notepad++中,視圖->顯示符號->顯示所有符號,然后就看到了預料到的,所有的回車換行都是windows的CR LF:
得知是Linux和windows下的回車換行符不兼容的問題。
所以,剩下的就是去將windows下面的CR LF,轉換為Linux下面的LF,即可。
此處,不需要再麻煩地去用其他dos2unix等工具了,notepad++就可以幫忙搞定:
編輯->檔案格式轉換->轉換為UNIX格式:
即可將所有的 CR LF,轉換為LF:
所以,越加發現notepad++的強大之處了。
然后再運行此shell腳本,即可正常運行了。
【總結】
linux/cygwin下面的shell腳本出現錯誤:
syntax error near unexpected token `$’do\r”
是由於該腳本文件是在windows環境下創建編輯的,其默認是將所有的回車變成:
CR加上 LF,而Linux/Unix中的回車只是LF,所以導致解釋器不認,出現此錯誤。
解決辦法就是,將所有的CRLF轉換為LF即可。
轉換的方法有多種,比如用dos2unix,或用此處的notepad++幫我們轉換,都可以。