我修改的中创储蓄对公业务U盘备份shell。请指正!

发表于:2007-05-26来源:作者:点击数: 标签:
在新太阳/奥尔两个程序的基础上修改的。请大家多多指教。 目前,正在修改硬盘备份部分。用中创的朋友,欢迎交流。 [quote:09f8d25e2d] #USBStorageUtility***信用社业务数据U盘备份程序1.0 #(c)Copyright2004 #编辑修改:查明胜zerozha@yahoo.com.cn #======

在新太阳/奥尔两个程序的基础上修改的。请大家多多指教。

目前,正在修改硬盘备份部分。用中创的朋友,欢迎交流。

[quote:09f8d25e2d]
#USB Storage Utility *** 信用社业务数据U盘备份程序1.0
#(c) Copyright 2004  
#编辑修改: 查明胜 zerozha@yahoo.com.cn

#==========================环境参数设置========================
#储蓄路径
BANKSTAR_HOME=/usr/bankstar
#对公路径
BANKACC_HOME=/usr/bankaclearcase/" target="_blank" >cc
#U盘系统装载点
MOUNT_POINT=/mnt
#U盘设备名称
DEV=/dev/dsk/1sC  
#U盘备份保留天数
DAYS=30
#==========================结束========================

MONTH=
DAY=

#=============================更改路径
change_to_dir() {
dir=$1

[ -f $dir ] && rm -r $dir
[ ! -d $dir ] && mkdir $dir

cd $dir
}
#==============================end

#==============================删除逾期数据
DeleteYqData()
{
Num=`ls $1/*.dat | wc -l` 
GeS=`expr $Num - $DAYS`
[ $GeS -gt 0 ] && {
Num=0
for i in `ls $1/*.dat`
do
Num=`expr $Num + 1`
yes | rm $i >/dev/null 2>/dev/null
[ $? -ne 0 ] && {
echo "\n$i 删除失败 !"
}
[ $Num -ge $GeS ] && break
done
}
}
#=================================结束

GetYN()
{
while echo "\n$* (Y/N): \07\c"
do
read yn
case $yn in
[yY]) return 0;;
[nN]) return 1;;
                   *) echo "\07\07"
esac
done
}
#================================================
DateAnalyse()
{
value=`echo $1 | awk 'BEGIN { FS="/" }
{
Year=$1
Mon=$2
Day=$3
if(Year<1899 || Year >9999 || Mon<1 || Mon >12 || \
   Day<1 || Day >31 || !IsDigit(Mon) || !IsDigit(Year) ||\
   !IsDigit(Day) || !IsYMD(Year,Mon,Day)) 
printf("1")
else printf("0")

}
function IsDigit(str)
{
for(i=1;i<=length(str);i++)
{
bit=substr(str,i,1)
if(bit<0 || bit>9) return(0)
}
return(1)
}
function IsLeapYear(YearNum)
{
if((int(YearNum%4)==0 && int(YearNum%100)!=0)||int(YearNum%400)==0)
return(1)
else return(0)
}
function IsYMD(YearNum,MonNum,DayNum)
{
DayArr["01"]=31
if(IsLeapYear(YearNum)) DayArr["02"]=29
else DayArr["02"]=28
DayArr["03"]=31
DayArr["04"]=30
DayArr["05"]=31
DayArr["06"]=30
DayArr["07"]=31
DayArr["08"]=31
DayArr["09"]=30
DayArr["10"]=31
DayArr["11"]=30
DayArr["12"]=31

if(DayNum>0 && DayNum<=DayArr[MonNum])
return(1)
else return(0)
''' `

return $value
}
#========================================
GetDate()
{
while true
do
echo "\n请输入$* (yyyy/mm/dd): \c"
read date
len=`expr length "$date"`
DateAnalyse $date
[ $? -ne 0 -o $len -ne 10 ]  && {
echo "\07\07\07"
echo "日期错误,按回车键重新输入 ...\c"
read key
continue
}
GetDateYN "输入$*为:  $date , 是否正确"
[ $? -eq 0 ] && break 
done
}
#=============================================

GetDateYN()
{
while echo "\n\07\07$* (Y/N): \c"
do
read yn
len=`expr length "$yn"`
[ $len -ne 1 ] && continue;
case $yn in
[yY]) return 0;;
[nN]) return 1;;
                   *) echo "\07\c";;
esac
done
}

#=============================================程序主画面 
main_menu() {
clear;
tput cup 1 1 
echo " 安庆市城郊信用合作联社业务数据U盘备份程序 Ver 1.0 \c"
echo "\n==========================================================\c"
tput cup 3 1
echo "[1] 储蓄业务数据备份         [2] 储蓄业务数据恢复    "
tput cup 5 1
echo "[3] 对公业务数据备份         [4] 对公业务数据恢复    "
tput cup 7 1 
echo "[5] 查看U盘使用情况          [6] 删除U盘全部数据     "
tput cup 9 1 
echo "[7] 选择删除U盘数据          [8] 列U盘内容     "
tput cup 11 1 
echo "[q]退           出 "
tput cup 13 1
echo "\n=========================================================="
echo "    现在时间:"`date&nbs'''+%Y年%m月%'''`",U盘数据将保留"$DAYS"天"
echo "=========================================================="
echo "请选择:\c";
}
#=============================================END 
check_privilege() {
id_num=`id -u `

if [ id_num -ne 0 ] 
then 
echo "请用超级用户执行此程序!!!!"
sleep 3
exit 
fi
}
#============================================查看U盘使用情况
usd_statistics() {
total=`df -kv $DEV |grep $DEV| awk&nbs'''{print $'''`
used=`df -kv $DEV |grep $DEV| awk&nbs'''{print $'''`
free=`df -kv $DEV |grep $DEV| awk&nbs'''{print $'''`
percent=`df -kv $DEV |grep $DEV|awk&nbs'''{print $'''`
  echo "                               U 盘 当 前 使 用 情 况                    "
echo "     --------------------------------------------------------------------"
echo "     总容量(K)          已用(K)          剩余(K)          百分比"
echo  "      ${total}            ${used}            ${free}     &nbbsp;       ${percent}"
  echo "     --------------------------------------------------------------------"
echo "     按回车键继续......\c"
read any
}
#============================================end

#============================================删除U盘所有数据
delete_all() {
echo "你确定要删除U盘所有数据吗?(y/n)\c"
cd $MOUNT_POINT
read opt
if [ $opt = "y" ] 
then 
rm -rf *
fi
}
#============================================end

#============================================选择删除U盘数据 
delete_single() {
cd $MOUNT_POINT
echo "U盘当前目录:"
lx
echo "请输入要删除目录:\c"
read delete_dir
if [ -d $delete_dir -o -f $delete_dir ] 
then 
echo "你确定要删除${delete_dir}吗?(y/n)\c"
read opt
if [ $opt = "y" ] 
then 
rm -rf $delete_dir
fi
else
echo "<$delete_dir>目录或文件不存在"
sleep 2
fi
}
#=========================================================
list_file() {
cd $MOUNT_POINT
echo "U盘当前目录:"
l
echo "任一键返回"
read any
}
backup_bankstar()
{
rm -r  /tmp/bankstar.exp    >/dev/null 2>/dev/null
rm -r -f /tmp/bankstar     >/dev/null 2>/dev/null
rm -r -f /tmp/bankstar.Z   >/dev/null 2>/dev/null
[ -f "/tmp/bankdata" -o -f "/tmp/bankdata.Z" ] && {
echo "请先清理 /tmp 然后再备份!\n"
read any
return
}

cd /tmp
dbexport bankstar
[ $? -eq 0 ] || {
echo "数据库卸载失败!\n"
read any
return
}

tar cvf /tmp/bankstar /usr/bankstar/com /usr/bankstar/data /usr/bankstar/etc /usr/bankstar/frm /tmp/bankstar.exp
chmod 777 /tmp/bankstar >/dev/null 2>/dev/null
compress -H /tmp/bankstar
chmod 777 /tmp/bankstar.Z >/dev/null 2>/dev/null
rm -r -f /tmp/bankstar.exp
[ $? -eq 0 ] || return
cszd=`dbaccess bankstar -<<-End 
select val from gcs where  dh="005";
End` 
gzrq=`echo $cszd | awk&nbs'''BEGIN { FS=" " }

split($2,a,"/") 
rq=sprintf("%s%s%s",a[1],a[2],a[3])
printf rq
'''`
echorq=`echo $cszd | awk&nbs'''BEGIN { FS=" " }

split($2,a,"/") 
rq=sprintf("%s/%s/%s",a[1],a[2],a[3])
printf rq
'''`

echo "正在备份$echorq储蓄数据...."
cd /mnt
change_to_dir bankstar
cp -f /tmp/bankstar.Z "$gzrq".dat
aa=$?
rm -f /tmp/bankstar.Z
[ $aa -eq 0 ] || { 
echo "文件(bankstar.Z)拷贝失败!!!"
read any
return
}
echo "备份数据成功 ! 按回车键返回...\c" 
DeleteYqData /mnt/bankstar
read any
echo 
}

recover_bankstar()
{
GetDate "所恢复数据的日期"
Date=`echo $date | awk&nbs'''BEGIN { FS="/" }{printf("%s%s%s",$1,$2,$3'''`
BkupFile="$Date.dat"
[ ! -f /mnt/bankstar/$BkupFile ] && {
    echo "\n\07\07${date}无备份数据 ! 按回车键返回...\c"
    read key
    return 1;
}
cd /tmp
rm bankstar.Z 2>/dev/null
cd /mnt/bankstar
[ -f "$Date.dat" ] || { echo "\n $Date.dat(数据)文件不存在!!!"
read key
return
}
echo "正在拷贝数据"
cp $Date.dat /tmp/bankstar.Z
[ $? -eq 0 ] || { rm -r /tmp/bankstar.Z>dev/null 2>/dev/null
read key
return
}
cd /tmp
rm -r bankstar 1>/dev/null 2>/dev/null
uncompress bankstar.Z
[ $? -eq 0 ] || { rm -r bankstar.Z>/dev/null 2>/dev/null
read key
return
}
tar xvf bankstar
[ $? -eq 0 ] || { rm -r bankstar.Z  >/dev/null 2>/dev/null
  rm -r bankstar >/dev/null 2>/dev/null
return
}
dbaccess - -<<-End >/dev/null 2>/dev/null 
drop database bankstar;
End
dbimport bankstar -l -i ./
flag=$?
while [ $flag -ne 0 ] 
do
GetYN "加载数据库失败 ! 是否重新加载数据库"  || return
dbaccess - - <<-End
drop database bankstar;
End
dbimport $DBNAME  -l -i ./
flag=$?
done
echo "恢复成功 ! 按回车键返回...\c" 
rm -r -f /tmp/bankstar.exp 2>/dev/null
read key
return
}

#备份对公业务数据
backup_bankacc()
{
cd /tmp
rm -r single.exp 2>/dev/null
rm single.Z 2>/dev/null
dbexport single
flag=$?
while [ $flag -ne 0 ] 
do
GetYN " 数据卸载失败 ! 是否重新卸载"  ||  {
rm single.Z >/dev/null 2>/dev/null
echo
return
}
rm -r single.exp 2>/dev/null
dbexport single
flag=$?
done
tar cvf single single.exp
flag=$?
while [ $flag -ne 0 ]
do
GetYN " 数据打包失败 ! 是否重新打包"  ||  {
rm single.Z >/dev/null 2>/dev/null
echo
exit $flag
}
rm single 2>/dev/null
tar cvf single single.exp
flag=$?
done

yes | compress single
flag=$?
while [ $flag -ne 0 ]
do
GetYN " 数据压缩失败 ! 是否重新压缩"  ||  {
rm single.Z >/dev/null 2>/dev/null
echo
return
}
rm  single.Z 2>/dev/null
yes | compress single
flag=$?
done
cszd=`dbaccess single -<<-End 
select rq from cszd;
End` 
gzrq=`echo $cszd | awk&nbs'''BEGIN { FS=" " }

split($2,a,"/") 
rq=sprintf("%s%s%s",a[1],a[2],a[3])
printf rq
'''`
echorq=`echo $cszd | awk&nbs'''BEGIN { FS=" " }

split($2,a,"/") 
rq=sprintf("%s/%s/%s",a[1],a[2],a[3])
printf rq
'''`
echo "正在备份$echorq对公业务数据...."
cd /mnt
change_to_dir single
cp -f /tmp/single.Z "$gzrq".dat
aa=$?
rm -f /tmp/single.Z
[ $aa -eq 0 ] || { 
echo "文件(single.Z)拷贝失败!!!"
return
}
echo "备份数据成功 ! 按回车键返回...\c" 
DeleteYqData /mnt/single
read any
echo 
}
#恢复对公业务数据
recover_bankacc()
{
GetDate "所恢复数据的日期"
Date=`echo $date | awk&nbs'''BEGIN { FS="/" }{printf("%s%s%s",$1,$2,$3'''`
BkupFile="$Date.dat"
[ ! -f /mnt/single/$BkupFile ] && {
    echo "\n\07\07${date}无备份数据 ! 按回车键返回...\c"
    read key
    return 1;
}
cd /tmp
rm single.Z 2>/dev/null
rm -r single.exp 2>/dev/null
cd /mnt/single
[ -f "$Date.dat" ] || { echo "\n $Date.dat(数据)文件不存在!!!"
return
}
echo "正在拷贝数据"
cp $Date.dat /tmp/single.Z
[ $? -eq 0 ] || { rm -r /tmp/single.Z>dev/null 2>/dev/null
return
}
cd /tmp
rm -r single 1>/dev/null 2>/dev/null
uncompress single.Z
[ $? -eq 0 ] || { rm -r single.Z>/dev/null 2>/dev/null
return
}
tar xvf single
[ $? -eq 0 ] || { rm -r single.Z  >/dev/null 2>/dev/null
 rm -r single >/dev/null 2>/dev/null
return
}
dbaccess - -<<-End >/dev/null 2>/dev/null 
drop database single;
End
dbimport single -l -i /tmp
flag=$?
while [ $flag -ne 0 ] 
do
GetYN "加载数据库失败 ! 是否重新加载数据库"  || return
dbaccess - - <<-End
drop database single;
End
dbimport single  -l -i /tmp
flag=$?
done
echo "恢复成功 ! 按回车键返回...\c" 
rm -f /tmp/single.exp 1>/dev/null 2>/dev/null
read key
return
}


##Main Programe
trap&nbs'''' 2 3 
#if [ ! -f "./usu.cfg" ] 
#then 
# echo "没有配置文件(usu.cfg),请与供应商联系"
# exit
#fi
#. ./usu.cfg 
check_privilege  #检查权限
mount -o lower ${DEV} ${MOUNT_POINT} 
if [ $? -ne 0 ] 
then 
echo "U盘安装有误 ,请检查!!!!"
sleep 3
exit
fi
while true  
do
main_menu
read opt 
case $opt in 
1)
backup_bankstar 
;;
2)
recover_bankstar 
;;
3)
backup_bankacc 
;;
4)
recover_bankacc 
;;
5)
usd_statistics
;;
6)
delete_all
;;
7)
delete_single
;;
8)
list_file
;;
q)
cd /
umount $DEV 
[ $? -ne 0 ]  && echo  "卸载U盘出错"
exit 
esac
done

[/quote:09f8d25e2d]

 CNL 回复于:2004-08-19 13:58:48
顶一下!支持老查!

 车尔尼 回复于:2004-08-19 16:55:40
太长了呵呵

 车尔尼 回复于:2004-08-19 16:55:42
太长了呵呵

 注册错误 回复于:2004-08-19 21:43:14
^-^
看得头晕

 老查 回复于:2004-08-19 22:03:28
有许多重复的过程,哪位帮助优化一下。

 zzlhw 回复于:2004-08-19 22:21:33
看了后感到很熟!

是不是新太阳的!!!

 sdccf 回复于:2004-08-20 08:27:38
楼主开头就说了,是在“新太阳/奥尔两个程序的基础上修改的”。

 wangrujun 回复于:2004-08-20 08:55:37
好象回到了10年前。以前写程序都是这样子的。

 saintdragon 回复于:2004-08-20 09:19:17
不错,论坛需要更多这样的东东。
支持老查!!

 walsq 回复于:2004-08-20 09:36:31
顶一下,不算灌水吧。

 handsun 回复于:2004-08-22 09:23:11
学习一下

 hsgzr 回复于:2004-08-23 00:55:23
很容易改 ,有时间我给改一下

 qjayun 回复于:2004-11-30 01:14:47
:shock: 
  你好;看过后很有感触,请你直接联系我好吗?
我手机号:13939987295
          农金系统工作人员
            钱军




静候

 老查 回复于:2004-11-30 07:37:29
[quote:93d78c8d1e="qjayun"]:shock: 
  你好;看过后很有感触,请你直接联系我好吗?
我手机号:13939987295
          农金系统工作人员
            钱军




静候[/quote:93d78c8d1e]

我的QQ:329975661 MSN:zerozha[a]yahoo.com.cn

 mychenming 回复于:2004-12-01 19:16:09
流水号的问题据你的方法全面解决,非常非常的谢谢你!

原文转自:http://www.ltesting.net