執行shell腳本提示“syntax error near unexpected token for((i=0;i<$length;i++))”


sh腳本例如以下:
#!/usr/bin/env bash

county="3 4 5 6 7 8 9 10 11 12 16 29 39 44 53 62 72 84 97 115 128 151 168 187 199 218 230 10079 10239 32478"
array=($county)
length=${#array[@]}

for((i=0;i<$length;i++))
do
     $HIVE_HOME/bin/hive -e "select * from county_area_category where county_id=${array[$i]}" >>  /home/deploy/ouyangyewei/category_area/data/${array[$i]}_county_area_category.txt;
done

sh是在windows平台下編寫的,上傳到linuxserver后執行。提演示樣例如以下錯誤:
done-bash-3.2$ sh test.sh
: command not found
: command not found
'est.sh: line 7: syntax error near unexpected token `
'est.sh: line 7: `for((i=0;i<$length;i++))

原因是由於所處理的文件換行符是dos格式的"\r\n",能夠使用cat -v 文件名稱 來查看換行符是否是。假設是上述,則行尾會是^m,例如以下:
-bash-3.2$ cat -v test.sh
#!/usr/bin/env bash^M
^M
county="3 4 5 6 7 8 9 10 11 12 16 29 39 44 53 62 72 84 97 115 128 151 168 187 199 218 230 10079 10239 32478"^M
array=($county)^M
length=${#array[@]}^M
^M
for((i=0;i<$length;i++))^M
do^M
        $HIVE_HOME/bin/hive -e "select * from county_area_category where county_id=${array[$i]}" >>  /home/deploy/ouyangyewei/category_area/data/${array[$i]}_county_area_category.txt;^M

這就導致了linux的換行符不一致問題,所以提示了上述錯誤!

解決的方法:
使用sed命令處理一下文件,使格式保持為linux格式,例如以下:
sed 's/\r//' 源文件 > 轉換后文件
?OO-bash-3.sed 's/\r//' test.sh > county_area_category.sh

ok,這樣就能夠了。


免責聲明!

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



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