运行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平台下编写的,上传到linux服务器后运行,提示如下错误:

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,这样就可以了!

运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”,布布扣,bubuko.com

时间: 2024-10-08 10:28:27

运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”的相关文章

shell脚本启动语法错误syntax error near unexpected token &#39;{

执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Linux系统下编辑之后放到系统执行的,文件模式类型非Linux系统匹配的模式类型. 查看文件的模式类型 显示文件的模式类型为 dos 修改文件的模式类型为Linux匹配的 unix 保存之后即可正常启动脚本. shell脚本启动语法错误syntax error near unexpected token '{ 原文地址:https://www.cnblogs.com/zjfjava/p/10708370.html

shell脚本syntax error near unexpected token `done&#39;

1.修改文件类型 执行: vi finddir.sh 输入 :set ff 如果fileformat=dos ,修改为unix: :set ff=unix 执行保存命令: :wq 2.删除隐藏字符 用命令vi -b 打开你的SHELL脚本文件,你会.发现每行脚本最后多了个^M 因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的"^M"符号,表示的是符. 在Vim中利用替换功能就可以将"^M"

shell出现syntax error near unexpected token `&lt;&#39; 解决方法

最新在看一个shell资料时,按照教材,却出现如下错误,不能运行 如下,简单的脚本: #!/bin/bash cat |while read line do echo $line done < <(data.txt|awk '{print $0}') 运行时,却出现如下错误 [[email protected] shellcookbook]# sh while_test.sh while_test.sh: line 5: syntax error near unexpected token `

shell脚本错误:syntax error near unexpected token &#39;$&#39;\r&#39;&#39;

linux下运行shell脚本出现错误:syntax error near unexpected token '$'\r'' 这是因为文件在编写时的回车是DOS的"\r\n",而正确的应该是"\n",所以需要将文件内所有的"\r\n"替换为"\n",如将1.sh修改另存为2.sh,有以下简单的方法: sed 's/\r//' 1.sh > 2.sh shell脚本错误:syntax error near unexpect

linux的shell脚本报错“syntax error near unexpected token `”的解决

今天写了一个shell脚本,老报错检查了一下基本的语法并没有发现错误.后来经过百度解决掉了,现总结如下. 错误现象:执行shell脚本,老报错"syntax error near unexpected token `" 解决办法:vim -b example.sh打开文件,发现文件每一行的末尾多了一个^M,这个问题在使用vim example.sh查看是看不见的,只能通过报错来判断使用vim -b才能发现问题. 因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下

Linux中syntax error near unexpected token 错误提示解决方法

Linux中syntax error near unexpected token ... 错误提示有一般有两种原因: 1)window和Linux下换行符不一致导致 window下的换行和Linux下的换行不同,如果将window下编写的代码文件上传到Linux下,容易出现该错误提示.可用 vi -b 文件名 或者cat -v 文件名命令查看,如果是游云换行符引起的,则每行后面有^M,这时只要将每个^M去掉即可. 2)Linux指令之间没有空格隔开

关于报错“syntax error near unexpected token `”和回车换行

本来是很简单一个事情,转过来是因为打字机这事比较有趣-- http://blog.csdn.net/xyp84/archive/2009/08/11/4435899.aspx 摘要一下: 回车 换行 0D 0A <CR> <LF> Carriage Return Line Feed "/r" "/n" win32 0D 0D 0A unix 0D 0A ============淡定的分割线=============== 今天写了个shell脚

linux--shell错误:syntax error near unexpected token ‘(&#39;

这几天编写了几个简单的shell程序,然后都出现了syntax error near unexpected token '(' 的错误,然后实在是检查不出错误:后面百度了才找到的原因: 之前错误的程序片段如下: usr=$ (whoami) dr=$ (pwd) 提示的错误如下: syntax error near unexpected token '(' 后面才知道原来是$ 与左括号之间多了一个空格,改正以后程序就正常运行了. 其实上面usr=$(whoami)等价于 usr=`whoami`

syntax error near unexpected token(关于跨平台非法字符(^M)的解决方法)

别人写了一个shell拿过来在linux试用,执行报错如下: 仔细查找了还是没找到错误,一直都是报syntax error near unexpected token `{ 网上搜索了一下,找到了端倪,现在简单整理如下: 现在可以判断给我脚本的这位仁兄很有可能是在windows平台上编写的.使用vim -b命令查看文件内容如下: 每一行多了一个^M有木有? 那么接下来就要搞清楚这个^M是什么东东? long long long ago .....  老式的电传打字机使用两个字符来另起新行.一个字