Shell字符串拼接及替换脚本示例

这段脚本涉及自动化日期处理、条件判断、错误检查以及数据库的删除和插入操作。它首先设置日期范围,然后根据参数执行不同操作,包括构建JDBC连接字符串,并通过DataX执行数据同步任务。在另一个脚本中,它执行SQL删除和插入操作,用于数据清理和加载,并发送邮件通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/bash
. ~/.bashrc
dateEnd=`date +"%Y%m%d"`
dateBegin=`date +%Y%m%d -d"-30 day $dateEnd"`
if [ $# == 1 ]; then
    if [ ! -n "$(echo $1| sed -n "/^[0-9]\+$/p")" ]; then
        echo "FATAL: The parameter is not a number."
        exit -1
    fi
    if [ $1 -gt 100 ]; then
        echo "FATAL: Parameter n cannot be greater than 100."
        exit -1
    fi
    dateBegin=`date +%Y%m%d -d"-$1 day $dateEnd"`
fi
delDateBegin=`date +%Y-%m-%d -d"+1 day $dateBegin"`
echo $dateBegin $dateEnd $delDateBegin
schema="fn"
tbname="t_bank_return"
example="/home/work/datax/job/fn/example/${schema}_${tbname}_days"
tempdir="/home/work/datax/job/fn"
basepath=$(cd `dirname $0`; pwd)
cd $basepath
jsonfile="${tempdir}/${schema}_${tbname}_days"
if [[ "$dateBegin" > "$dateEnd" ]]; then
    echo "FATAL: dateEnd must be greater than or equal to dateBegin. dateBegin: $dateBegin, dateEnd: $dateEnd"
    exit -1
fi
jdbcTpl="{\"jdbcUrl\":[\"jdbc:mysql://10.157.19.18:6012/bfb_db_finance_DBDATE\"],\"table\":[\"t_bank_return\"]}"
jdbcStr=""
while [[ "$dateBegin" < "$dateEnd" ]] || [[ "$dateBegin" == "$dateEnd" ]]; do
    dayStr="${jdbcTpl/DBDATE/$dateBegin}"
    jdbcStr="$jdbcStr,$dayStr"
    dateBegin=`date +%Y%m%d -d"+1 day $dateBegin"`
done
echo "while done"
# 去掉第一个字符
jdbcStr=`echo $jdbcStr | awk '{print substr($1,2)}'`
# 下面sed 所以需要转义斜线和双引号
# 单斜线替换一次 双斜线替换所有匹配
jdbcStr="${jdbcStr//\"/\\\"}"
jdbcStr="${jdbcStr//\//\/}"
echo $jdbcStr
sed "s/JDBCSTR/${jdbcStr}/g;s/CURRENTDATE/${dateEnd}/g" ${example} > ${jsonfile}
echo "${jsonfile} done"
~/datax/bin/start_datax.sh ${jsonfile} && bash /home/work/datax/sh-load/t_bank_return_days.sh ${schema} ${tbname} ${delDateBegin}
echo "*****************************"
echo "*****************************"
echo "*****************************"

# 0 */1 * * * (cd /home/work/daiyuanpei; bash t_bank_return_days.sh 13 > /home/work/v_daiyuanpei/t_bank_return_days.out 2>&1 &)
#!/bin/bash
. ~/.bashrc
if [ $# -lt 3 ]
then
    echo "./loaddata schema tablename delDateBegin"
    exit
fi
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
schema=$1
tablename=$2
delDateBegin=$3
data_path=" /home/work/pay-datax-admin/ext/r_ext_${schema}_${tablename}_old.dat"
basepath=$(cd `dirname $0`; pwd)
cd ${basepath}
if [ ! -e ${data_path} ];then
 echo "no exist filepath:${data_path}"
 exit
fi

DEL_SQL="delete from ${schema}.${tablename} where dt>='${delDateBegin}';"
LOAD_SQL="insert into ${schema}.${tablename} select * from pay_data_ext.r_ext_${schema}_${tablename}_old;"
echo ${DEL_SQL}
echo ${LOAD_SQL}
tempfile="${basepath}/temp.log"
export PGPASSWORD=******
/usr/bin/psql -h *.*.*.* -p 5432 -d gp_pay -U pay_cloud_data -c "$DEL_SQL" > ${tempfile} 2>&1
if [ $? -eq 0 ]
   then
        logmsg=`cat ${tempfile}`
        echo "DELETE SUCCESS ${logmsg}"
     else
        logmsg=`cat ${tempfile}`
        echo "DELETE FATAL ${logmsg}"
fi
/usr/bin/psql -h *.*.*.* -p 5432 -d gp_pay -U pay_cloud_data -c "$LOAD_SQL" > ${tempfile} 2>&1
if [ $? -eq 0 ]
   then
        logmsg=`cat ${tempfile}`
        echo "load to success ${tablename}:${logmsg}"
        emailTitle="[云上][${schema}.${tablename}] load success"
        emailContent=`echo "datax load to gppay success: ${schema}.${tablename}: ${logmsg}"`
     else
        logmsg=`cat ${tempfile}`
        msg=`echo "datax load to gppay failed:${tablename}:${logmsg}"`
        emailTitle="[云上][${schema}.${tablename}] load failed"
        emailContent=`echo "datax load to gppay failed: ${schema}.${tablename}: ${logmsg}"`
fi
echo ${emailContent} | mail -s "${emailTitle}" daiyuanpei@dyp.com

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值