shell文件報(bào)錯syntax error near unexpected token '$'\r''

本來跑的好好得一個文件,在windows下修改了,然后移植到linux就報(bào)錯了。
找了一圈以下是解決方案:

這種情況發(fā)生的原因是因?yàn)槟闼幚淼奈募Q行符是dos格式的"\r\n"
可以使用cat -v 文件名 來查看換行符是否是,如果是上述的,則行結(jié)尾會是^m
需要轉(zhuǎn)換成linux/unix格式的"\n"
具體轉(zhuǎn)換辦法就是轉(zhuǎn)換換行符
可以用sed命令處理一下文件,命令如下:
sed 's/\r//' 原文件 >轉(zhuǎn)換后文件


1.png

2.png

檢查shell語法

[root@iZm5ed2begvgw01qrymv8yZ Data]# bash -n task_start.sh 
task_start.sh: line 4: syntax error near unexpected token `$'do\r''
'ask_start.sh: line 4: `do
[root@iZm5ed2begvgw01qrymv8yZ Data]# 

在我執(zhí)行發(fā)現(xiàn)代碼沒有了

[root@iZm5ed2begvgw01qrymv8yZ Data]# sed 's/\r//g' task_start.sh > task_start.sh 
[root@iZm5ed2begvgw01qrymv8yZ Data]# 
[root@iZm5ed2begvgw01qrymv8yZ Data]# 
[root@iZm5ed2begvgw01qrymv8yZ Data]# 
[root@iZm5ed2begvgw01qrymv8yZ Data]# 
[root@iZm5ed2begvgw01qrymv8yZ Data]# cat task_start.sh -v
[root@iZm5ed2begvgw01qrymv8yZ Data]# cat task_start.sh

原因
···

解決

[root@iZm5ed2begvgw01qrymv8yZ Data]# sed 's/\r//g' task_start.sh > task_start2.sh 
[root@iZm5ed2begvgw01qrymv8yZ Data]# 
[root@iZm5ed2begvgw01qrymv8yZ Data]# 
[root@iZm5ed2begvgw01qrymv8yZ Data]# cat task_start2.sh 
#!/usr/bin/env bash
task_url=("http://hs.oeynet.com/task.php" "http://hs.oeynet.com/task.php")
for n in `seq 10`
do
    for task in ${task_url[*]}
    do
        curl $task  >> /www/server/logs/task.log
    done
    sleep 6
done
[root@iZm5ed2begvgw01qrymv8yZ Data]# cat task_start2.sh -v

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容