【Shell】批量文件上传

  • Post author:
  • Post category:其他


#!/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文件到文件接收服务器结束———-”



版权声明:本文为qq_35392117原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。