【Shell】批量文件上传

#!/bin/bash
############################################################################
#批量文件上传
#调用方法:sh upload_file_all.sh etl_date source_system odm_tab_name
############################################################################

etl_date=$1
source_system=$2
odm_tab_name=$3

etl_path=/data/script/edw/etlpath/
log_path=${etl_path}log/
bin_path=${etl_path}bin/
java_path=${etl_path}java/edwutil/data/
#拿掉源系统代码及左边的字符串
#source_system=CIF
#odm_tab_name=O_CIF_CLIENT
#echo ${odm_tab_name#*"${source_system}"_}
src_tab_name=`echo ${odm_tab_name#*"${source_system}"_}`

if [ ! -d ${log_path} ]; then
  mkdir -p ${log_path}
fi

shlog()
{
    local line_no msg
    line_no=$1
    msg=$2
    echo "[main_to_bk.sh][$line_no]["`date "+%Y%m%d %H:%M:%S"`"] $msg ">> ${log_path}main_to_bk_${etl_date}.log
    echo -e "\033[31;40;1m[main_to_bk.sh][$line_no]["`date "+%Y%m%d %H:%M:%S"`"] $msg \033[39;49;0m"
}

judge()
{
    local line_no code tablename
    line_no=$1
    code=$2
    tablename=$3
    if [ $code -ne 0 ]; then
    shlog ${line_no} ${tablename}"失败!!!"
    exit 1
  else
    shlog ${line_no} ${tablename}"成功..."
  fi
}

shlog $LINENO "----------开始从上传TXT文件和OK文件到文件接收服务器----------"

#计算该表在配置文件中的条数
tab_count=`grep ${odm_tab_name}" " ${etl_path}conf/TAB.CFG | wc -l`

if [ ${tab_count} -eq 0 ]; then
  shlog $LINENO "配置文件TAB.CFG中不存在${odm_tab_name}表,请检查......"
  exit 1
elif [ ${tab_count} -gt 1 ]; then
  shlog $LINENO "配置文件TAB.CFG中有多条${odm_tab_name}记录,请检查......"
  exit 1
else

  #每张表对应多个数据文件,需要循环多次对每个数据文件和对应的OK文件进行推送,如果有一个数据文件推送不通过则跳出循环,报错
  tab_line=`grep ${odm_tab_name}" " ${etl_path}conf/TAB.CFG`
  #获取分区号
  dfa_code=`echo ${tab_line} | awk -F" " '{print $2}'`
  #获取一共有几个空格
  dcn_count=`echo "${tab_line}" | tr -cd " " | wc -c`
  count=1

  while(( ${count}<=${dcn_count} ))
  do

    echo $count
    let "count++"
    echo $count
    echo ${tab_line}
    #得到分区号
    dcn_name=`echo ${tab_line} | awk -F" " '{print $v}' v=$count`
    echo "dcn_name:"${dcn_name}
    if [ ${dfa_code}"x" = "x" ]; then #数据文件不带dfa编号
      src_file_name=${src_tab_name}'-'${etl_date}
    else
      src_file_name=${src_tab_name}'-'${dcn_name}'-'${etl_date}
    fi
    echo ${src_file_name}

    shlog $LINENO "----------开始推送${src_file_name}文件----------"

    test -e ${java_path}${etl_date}/${src_file_name}.OK
    #判断OK文件是否存在,不存在轮询判断
    while [ $? = 1 ]
    do
      shlog $LINENO "${src_file_name}.OK标志文件不存在,开始轮询"
      sleep 300
      hadoop fs -test -e ${check_path}${src_file_name}.OK
    done

    sh ${bin_path}upload_file.sh ${etl_date} ${source_system} ${java_path}${etl_date}/${src_file_name}.OK ${log_path}
shlog $LINENO "----------上传OK文件到文件接收服务器结束----------"
    test -e ${java_path}${etl_date}/${src_file_name}.TXT
    #判断TXT标志文件是否存在,不存在轮询判断
    while [ $? = 1 ]
    do
      shlog $LINENO "${src_file_name}.TXT标志文件不存在,开始轮询"
      sleep 300
      hadoop fs -test -e ${check_path}${src_file_name}.OK
    done    
    sh ${bin_path}upload_file.sh ${etl_date} ${source_system} ${java_path}${etl_date}/${src_file_name}.TXT ${log_path}
  done
fi

echo "exit_code:${exit_code}"
shlog $LINENO "----------上传TXT文件到文件接收服务器结束----------"
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值