Shell script derivative upload ftp

Shell script derivative upload ftp

Function description

The current requirements are as follows: it is necessary to obtain data from the Oracle database through scheduled tasks, and then transfer the obtained data to the ftp service. The function is relatively simple and is implemented through a shell script.

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

Note: config.ini is a configuration file, mainly for ease of control.

Guess you like

Origin blog.csdn.net/weixin_38717886/article/details/115270801