用-或者--传参的shell

废话少说,直接上代码

#!/bin/bash
##################
#作者:
#描述:导出hive表
#
##################

usage(){
    echo -e "脚本功能:从hive中导出某张表的数据到本地"
    echo -e "命令参数:"
    echo -e "-h --help 帮助文档"
    echo -e "-D --database 数据库名称,必填"
    echo -e "-T --table 表名,必填"
    echo -e "-F --fields 字段列表,英文逗号隔开,可添加默认值,必填,记住用引号包起来,否则接收的不完整,例如\"id,name,'10' as age,createdate\""
    echo -e "-t --terminated-by 字段数据分隔符,可选,默认'|'"
    echo -e "-W --where 过滤条件,可选,记住用引号包起来,否则接收的不完整,例如\"dt='2017-04-21' and createdata='2017-04-21'\""
    exit 1
}

#-o或--options选项后面接可接受的短选项,如ab:c::,表示可接受的短选项为-a -b -c,其中-a选项不接参数,-b选项后必须接参数,-c选项的参数为可选的
#-l或--long选项后面接可接受的长选项,用逗号分开,冒号的意义同短选项,没有冒号表示不接参数,单冒号表示必须接参数,双冒号表示参数可选
#-n选项后接选项解析错误时提示的脚本名字

ARGS=`getopt -o hD:T:F:t:W: --long help,database:,table:,fields:,terminated-by:,where: -n 'export_hive_table.sh' -- "$@"`
if [ $? != 0 ]; then
    exit 1
fi

#echo $ARGS
#将规范化后的命令行参数分配至位置参数($1,$2,...)
eval set -- "${ARGS}"

database=""
table=""
fields=""
terminatedby="|"
where=""

while true
do
    case "$1" in
        -h|--help)
            usage;
            shift 1
            ;;
        -D|--database) 
            database=$2;
            shift 2
            ;;
        -T|--table)
            table=$2;
            shift 2
            ;;
        -F|--fields)
            fields=$2;
            shift 2
            ;;
        -t|--terminated-by)
            terminatedby=$2;
            shift 2
            ;;
        -W|--where)
            where=$2;
            shift 2
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error!"
            exit 1
            ;;
    esac
done

echo "database:$database"
if [ -z "$database" ];then
   echo "-D|--database 数据库名必传!"
   exit 1
fi

echo "table:$table"
if [ -z "$table" ];then
   echo "-T|--table 表名必传!"
   exit 1
fi

echo "fields:$fields"
if [ -z "$fields" ];then
   echo "-F|--fields 字段列表必传!"
   exit 1
fi

echo "terminated-by:$terminatedby"

echo "where:$where"
if [ -n "$where" ];then
   where="where $where"
fi

##此脚本所在目录路径
bin_abs_path=$(readlink -f $(dirname $0))
base_dir=$bin_abs_path/..

##导出的数据,存储为本地文件的目录路径
localfile_dir=$base_dir/data/$database/$table

hive_sql="set mapreduce.job.queuename=root.bigdata.friend;insert overwrite local directory '$localfile_dir' row format delimited fields terminated by '$terminatedby' select $fields from $database.$table $where;"

echo "`date +'%F %H:%M:%S'`  $hive_sql"
echo "`date +'%F %H:%M:%S'`  export hive data ......"
hive -e "$hive_sql"
success=$?
echo "`date +'%F %H:%M:%S'`  hive command return $success"
if [ $success != 0 ];then
  echo "`date +'%F %H:%M:%S'`  export hive data failed!"
  exit $success
fi
echo "`date +'%F %H:%M:%S'`  export hive data success! data directory:$localfile_dir "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值