寫shell,運行出錯:syntax error near unexpected token `$’do\r”


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++幫我們轉換,都可以。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM