zoukankan      html  css  js  c++  java
  • 执行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格式的" ",能够使用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/ //' 源文件 > 转换后文件
    ?OO-bash-3.sed 's/
    //' test.sh > county_area_category.sh

    ok,这样就能够了。

  • 相关阅读:
    MySQL表碎片整理
    MySQL表碎片整理
    MySQL配置索引页的合并阈值
    MySQL InnoDB配置统计信息
    MySQL InnoDB配置统计信息
    代码检查工具sonarqube介绍及使用
    gradle多模块构建集成swagger
    springboot不加载bootstrap.properties文件
    nexus3.x启动不起来
    linux防火墙查看状态firewall、iptable
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5205356.html
Copyright © 2011-2022 走看看