執行shell指令碼提示“syntax error near unexpected token for((i=0;i
阿新 • • 發佈:2019-01-29
sh指令碼如下:
ok,這樣就可以了!
sh是在windows平臺下編寫的,上傳到linux伺服器後執行,提示如下錯誤:#!/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
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,如下:
這就導致了linux的換行符不一致問題,所以提示了上述錯誤! 解決辦法: 使用sed命令處理一下檔案,使格式保持為linux格式,如下: sed 's/\r//' 原始檔 > 轉換後文件-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
?OO-bash-3.sed 's/\r//' test.sh > county_area_category.sh
ok,這樣就可以了!