shell脚本之导数上传ftp
功能描述
目前存在的需求如下:需要通过定时任务去Oracle数据库获取数据,然后再将获取的数据传输到ftp服务上,功能比较简单,通过shell脚本来实现。
bashfile.sh
#!/bin/bash
source /etc/profile
echo -e "\033[31m ****** 批量导数定时脚本 START `date +%Y年%m月%d日` ****** \033[0m"
#获取当前日期
DAY=`date +%Y%m%d`
##开始时间
start_time_sec=`date +%s`
#格式化日期
date_2=`date -d $DAY +"%Y-%m-%d"`
#读取配置信息
#[oracle]
ouname=`awk -F '=' '/\[oracle\]/{a=1}a==1&&$1~/username/{print $2;exit}' config.ini`
opwd=`awk -F '=' '/\[oracle\]/{a=1}a==1&&$1~/password/{print $2;exit}' config.ini`
osid=`awk -F '=' '/\[oracle\]/{a=1}a==1&&$1~/sid/{print $2;exit}' config.ini`
#[ftp]
fip=`awk -F '=' '/\[ftp\]/{a=1}a==1&&$1~/ip/{print $2;exit}' config.ini`
funame=`awk -F '=' '/\[ftp\]/{a=1}a==1&&$1~/username/{print $2;exit}' config.ini`
fpwd=`awk -F '=' '/\[ftp\]/{a=1}a==1&&$1~/password/{print $2;exit}' config.ini`
#[dir]
datadir=`awk -F '=' '/\[dir\]/{a=1}a==1&&$1~/datafile/{print $2;exit}' config.ini`
ftpdir=`awk -F '=' '/\[dir\]/{a=1}a==1&&$1~/ftpdir/{print $2;exit}' config.ini`
#连接数据库
echo -e "\033[33m ****PLSQL操作数据库 start `date +%Y年%m月%d日-%H时%M分%S秒`**** \033[0m"
dbCon=smart/smart@orcl
sqlplus -S $dbCon<< EndSql
exit
EndSql
echo -e "\033[33m **** PLSQL操作数据库 end `date +%Y年%m月%d日-%H时%M分%S秒` **** \033[0m"
#执行导出命令
echo -e "\033[33m **** 数据泵导出maodou_${DAY}.dmp文件 start `date +%Y年%m月%d日-%H时%M分%S秒` \033[0m"
#校验本地目录是否存在待生成的文件
dmpfile="${datadir}/maodou_${DAY}.dmp"
if [ ! -f "$dmpfile" ]; then
expdp $ouname/$opwd@$osid dumpfile=maodou_${DAY}.dmp directory=DATA_PUMP_DIR logfile=maodou_${DAY}.log
else
rm $dmpfile
expdp $ouname/$opwd@$osid dumpfile=maodou_${DAY}.dmp directory=DATA_PUMP_DIR logfile=maodou_${DAY}.log
fi
if [ $? -ne 0 ]; then
echo "导数失败!"
exit 0
else
echo "导数成功!"
fi
#二次校验
logfile="${datadir}/maodou_${DAY}.log"
vars=`sed -n '$p' $logfile |grep "successfully"`
# -n 判断一个变量是否有值
if [ ! -n "$vars" ]; then
echo "在 smart_"${DAY}".log 获取不到successfully字样的信息!!!"
echo "执行失败!!!"
exit 0
fi
echo -e "\033[33m **** 数据泵导出maodou_${DAY}.dmp文件 end `date +%Y年%m月%d日-%H时%M分%S秒` \033[0m"
#连接ftp传输文件
echo -e "\033[33m **** ftp传输maodou_${DAY}.dmp文件 start `date +%Y年%m月%d日-%H时%M分%S秒` \033[0m"
filename=smart_${DAY}.dmp
#进入待上传文件目录
cd $datadir
ftp -n -i <<EOF
open $fip
user $funame $fpwd
bin
cd $ftpdir
put $filename
bye
EOF
echo -e "\033[33m **** ftp传输maodou_${DAY}.dmp文件 end `date +%Y年%m月%d日-%H时%M分%S秒` \033[0m"
##结束时间
end_time_sec=`date +%s`
##耗时
lose_time_sec=$[$end_time_sec - $start_time_sec]
echo -e "\033[31m ****** 批量导数定时脚本 END 总体流程结束 \033[5;34m 耗时:$lose_time_sec 秒!\033[0m ******\033[0m"
config.ini
##数据库信息
[oracle]
username=smart
password=smart
sid=orcl
##ftp信息
[ftp]
ip=192.168.181.132
username=leo
password=12345
upfile=resove
##数据存放目录
[dir]
datafile=/u01/app/oracle/admin/orcl/dpdump
localfiledir=/u01/app/oracle/admin/orcl/dpdump
ftpdir=send
注:config.ini是配置文件,主要是为了便于控制。