shell脚本 20101102

14 篇文章 0 订阅

#前三个月
year=`date +%Y`
mon=`date +%m`
if [ $mon -lt '04' ]
then
mon=`expr $mon + 9`
year=`expr $year - 1`
else
mon=`expr $mon - 3|awk '{printf("%02d/n",$0)}'`
fi
validbillcyc=$year$mon


awk '{ if(substr($0,41,1)=="-" && substr($0,16,10)=="0000000000") print $0 }' $BAKDIR/"$FILENAME".old > $WORKDIR/tmpfile;

 

文件转移(自动压缩并上传文件)
find ./ -name "hkreq*" -atime +5 > /usr1/run/shell/user/qh/Deduct_req_Fx/hkreq
awk '{print "mv " $1 " /appdata/fileftp/zw/Deduct_req_Fx/sz/sz_bakto40/"}' /usr1/run/shell/user/qh/Deduct_req_Fx/hkreq > /usr1/run/s
hell/user/qh/Deduct_req_Fx/hkreq.sh
sh  /usr1/run/shell/user/qh/Deduct_req_Fx/hkreq.sh
cd /appdata/fileftp/zw/Deduct_req_Fx/sz_bakto40/
gzip hkreq*
ftp -i -n 10.243.207.208 <<EOF>/dev/null
user devis devis
cd /test/cxlog3/Deduct_req_Fx/sz/
bin
prompt
put hkreq*
bye
EOF
rm /appdata/fileftp/zw/Deduct_req_Fx/sz_bakto40/hkreq*
强制索引
select /*+ index(a,PK_CM_SUBS_SUBSCRIBER) */ a.servnumber,to_char(b.subsid),b.VALIDBILLCYC,to_char(b.ACCTID),b.RECAMT from test.sg_c
m_subs_subscriber a, sgzw.ib_cbtm_unwfacct b where a.subsid=b.subsid;

相关set设置
set colsep "|";
set echo off;
set feedback off;
set heading off;
set pagesize 0;
set linesize 1000
set numwidth 12;
set termout off;
set trimout on;
set trimspool on;

 

declare
v_rec_sum number(20);            --受理资源开户号码的总数
v_work_sum number(20);           --前台资源明细对应的开户号码总数
v_workloadid varchar(20);        --工作量流水
v_amend_num number;              --失败的号码数量
v_recoid varchar(20);            --失败的号码对应的日志流水
v_region varchar(10);            --地市编号
v_true_money number(20,2);       --实际成功开户号码的总金额
v_f_servnumber varchar(20);      --失败的号码
v_is_sernumber number(2);

v_orgid varchar(20);            --办理的渠道
v_operid varchar(20);           --操作员ID
v_prodid varchar(10);           --产品号
v_cycle varchar(20);            --业务办理的日期
v_recdefid varchar(20);         --业务类型
 
begin
v_amend_num := 0;              
v_recoid := null;   
v_region := '755'; 
v_f_servnumber := '157';
v_recoid :='&请输入日志流水';


 
select count(distinct b.servnumber),a.recorgid,a.recopid,to_char(a.recdate,'yyyymmdd'),a.recdefid,a.prodid into v_amend_num,v_orgid,v_operid,v_cycle,v_recdefid,v_prodid
 from szyy.reception a ,szyy.bat_install_resinfo b,szyy.bat_intall_int c
 where a.oid = b.BATRECID
 and b.INSTALLRECID = c.INSTALLRECID
 and b.region = 755
 and a.oid =v_recoid                                     --根据开户失败的号码查找出失败号码个数
 group by a.recorgid,a.recopid,to_char(a.recdate,'yyyymmdd'),a.recdefid,a.prodid;
 

 if (v_recoid = null)
 then
 dbms_output.put_line('您输入的流水:'||v_recoid||'没有该失败开户的相关记录,请查看bat_intall_int表');
 end if ;
 
select sum(quantity) into v_rec_sum from szyy.cs_rec_resource where recoid = v_recoid;

if v_rec_sum > v_amend_num   --失败的号码数量比总数少的情况
then
   dbms_output.put_line('--------打印出如下修改的前台脚本--------');
   dbms_output.put_line('update szyy.reception set recfee=(recfee/'||v_rec_sum||')*('||v_rec_sum||'-'||v_amend_num||') where oid='||v_recoid||';');
   dbms_output.put_line('update szyy.cs_rec_fee set fee=(fee/'||v_rec_sum||')*('||v_rec_sum||'-'||v_amend_num||') where recoid='||v_recoid||';');
  
   dbms_output.put_line('delete from szyy.rec_resource where beginresid in ( select enum from szyy.subscriber a where servnumber in( select b.servnumber from szyy.reception a ,szyy.bat_install_resinfo b,szyy.bat_intall_int c where a.oid = b.BATRECID and b
INSTALLRECID = c.INSTALLRECID and b.region = 755 and a.oid = '||v_recoid||') and a.active = 1) and recoid = '||v_recoid||';');
else
   dbms_output.put_line('delete from szyy.reception where oid='||v_recoid||';');
   dbms_output.put_line('delete from szyy.cs_rec_fee where oid='||v_recoid||';');
   dbms_output.put_line('delete from szyy.cs_rec_resource where oid='||v_recoid||';');
end if ;

select workloadid into v_workloadid from szyy.cs_wl_workrecrela where recoid=v_recoid and region=v_region;
select sum(quantity) into v_work_sum from szyy.cs_cwl_resource where workloadoid=v_workloadid;
select (recfee/v_work_sum)*(v_work_sum-v_amend_num) - (discount/v_work_sum)*(v_work_sum-v_amend_num)  into v_true_money from szyy.cs_cwl_workload where oid=v_workloadid;

if v_work_sum > v_amend_num
then
   dbms_output.put_line('update szyy.cs_cwl_workload set recfee=(recfee/'||v_work_sum||')*('||v_work_sum||'-'||v_amend_num||'),discount=(discount/'||v_work_sum||')*('||v_work_sum||'-'||v_amend_num||') where oid='||v_workloadid||';');
   dbms_output.put_line('update szyy.cs_cwl_resource set quantity=quantity-'||v_amend_num||' where workloadoid='||v_workloadid||';');
   dbms_output.put_line('update szyy.cs_cwl_revenue set fee=(fee/'||v_work_sum||')*('||v_work_sum||'-'||v_amend_num||'),discount=(discount/'||v_work_sum||')*('||v_work_sum||'-'||v_amend_num||') where workloadoid='||v_workloadid||';');
  
   if v_true_money <> 0
   then
      dbms_output.put_line('update szyy.cs_cwl_paytype set fee='||v_true_money||' where workloadoid='||v_workloadid||';');
   end if;
else
   dbms_output.put_line('delete from szyy.cs_cwl_workload where oid='||v_workloadid||';');
   dbms_output.put_line('delete from szyy.cs_cwl_revenue where workloadoid='||v_workloadid||';');
   dbms_output.put_line('delete from szyy.cs_cwl_paytype where workloadoid='||v_workloadid||';');
   dbms_output.put_line('delete from szyy.cs_cwl_resource where workloadoid='||v_workloadid||';');
end if;

dbms_output.put_line('------------------------------------------------');

dbms_output.put_line('该故障相关的大概情况如下:');
dbms_output.put_line('失败开户号码数量:'||v_amend_num);
dbms_output.put_line('日志流水开户的号码总数:'||v_rec_sum);
dbms_output.put_line('涉及的日志流水:'||v_recoid);
dbms_output.put_line('成功开户号码涉及的实收:'||v_true_money);
dbms_output.put_line('办理的渠道:'||v_orgid);
dbms_output.put_line('操作员:'||v_operid);
dbms_output.put_line('产品:'||v_prodid);
dbms_output.put_line('业务ID:'||v_recdefid);
dbms_output.put_line('时间:'||v_cycle);

dbms_output.put_line('------------------------------------------------');

end;

echo "***************************************"                                                              
echo "* attr="1"--------预约登记              *"                                                            
echo "* attr="2"--------短信菜单查询          *"                                                            
echo "* attr="101"------短信咨询              *"                                                            
echo "* attr="102"------短信调查              *"                                                            
echo "* attr="103"------短信营业厅内部处理业务*"                                                            
echo "* attr="201"------BOSS业务办理          *"                                                            
echo "* attr="202"------BOSS业务查询          *"                                                            
echo "* attr="203"------BOSS业务取消          *"                                                            
echo "* attr="204"------交互短信              *"                                                            
echo "* attr="205"------短信菜单业务处理      *"                                                            
echo "* attr="301"------短信营业厅不处理业务  *"                                                            
echo "* RETCODE=001---走本地系统              *"                                                              
echo "* attr="302"------本地系统查询          *"
echo "* attr="303"------本地系统办理          *"
echo "* 运行格式:dxyyt 号码          *"
echo "***************************************"
mobile=$1                                                                                                   
sqldir=/tmp/sqldir.sql                                                                                      
echo " unload to /tmp/pp                                                               " >$sqldir           
echo " select srcid,to_char(WORKFDEALTIME,'yyyy-mm-dd hh24-mi-ss'),REQSTREAMNO,        ">>$sqldir          
echo " destid,PRODID,REGION,msgcontent,TRADEINFO,RETCODE,ATTR,SMPABCREFIX,SMNUMPREFIX    " >>$sqldir          
echo " from gdsm.sv_sms_result where srcid='$mobile' order by workfdealtime;           " >>$sqldir          
/dxyyt/kefu/dbtool cxtyd_rw/tyd4321@gdsm2 -f[$sqldir] afljk 1>/dev/null 2>&1                                       
echo "srcid |WORKFDEALTIME |REQSTREAMNO|destid |PRODID |REGION |msgcontent |TRADEINFO |RETCODE|ATTR|SMPABCREFIX|SMNUMPREFIX"               
cat /tmp/pp                                                                                                 
echo " "                                                                                                    
echo "************************************************************************************************"     
echo "现在可以输入REQSTREAMNO这个字段值查询下发短信内容"   
while(true)                                               
 do
               read aa                                                                                                     
               b=$aa                                                                                                      
               echo $b                                                                                                    
               echo " unload to /tmp/pp                                                                         " >$sqldir
               echo "select SRCID,DESTID,MSGCONTENT, to_char(WORKFDEALTIME,'yyyy-mm-dd hh24-mi-ss') from        " >>$sqldir
               echo "gdsm.SV_SMS_SNDREQSUCC where REQSTREAMNO='$b'  order by workfdealtime;" >>$sqldir
               /dxyyt/kefu/dbtool test_rw/tyd4321@gd -f[$sqldir] password 1>/dev/null 2>&1                                      
               cat /tmp/pp
 done
 
 
 #!/usr/bin/ksh
. /home/devis/.profile
stty columns 132
#echo "1.查询cics日志,需要的参数是1.号码,2.时间,3.地区"
#echo "2.如要查广州时间为9月12号20点的cics日志,请输入cics 13570313613 2008091220  gz" 
#echo "3.可以用用户id或者别的代替号码查询"
#echo "4.因为cics日志是ZWGZBSTR.out200710071434.g很大,所以匹配的时候尽量把时间缩小"
# yexianhai
#20100805-修正脚本的查找单个文件是出错的bug。
#20100809-更新脚本为交互模式,使查找更加人性化。
#20100810-把ZW${Region}*$2*更新为*${Region}*BSTR.out*$2*
#20100813-更新pid可以循环输入。
#echo "更新了这个脚本,测试阶段,有问题请联系我,谢谢 --xiaoye"
echo ""
echo "------------------------------------------------------------------------------------------------------"
olnynum=`date +%Y%m%d%H%M%S`

if [ $# -ne 3 ]
            then
              echo "参数错误,请输入 关键字 业务发生时间点 地市小写缩写作为参数例如:sh $0 13570313613 2008091220  gz/all(全省)"
              exit 1
fi
####删除多余文件
if [ -a cicslog_20* ]
then
lognum=`ls -lrt cicslog_20*|wc -l|awk '{print $1}'`
 if [ $lognum -gt 6 ]
  then
  rmnum=`expr $lognum "-" 6`
   ls -lrt cicslog_20*|head -${rmnum}|awk '{print $9}'|xargs rm
  fi
fi


subcics()
{
print $3

case $3 in
jm) cicslist="S3YZMW S4YZMW cics10 cics12 cics12_2010 cics14 cics15 cics3 cics4 ";;     
mz) cicslist="S3YZMW S4YZMW cics10 cics12 cics12_2010 cics14 cics15 cics3 cics4 ";;
qy) cicslist="S3YZMW S4YZMW cics10 cics12 cics12_2010 cics14 cics3 cics4 ";;
yf) cicslist="S3YZMW S4YZMW cics10 cics12 cics12_2010 cics14 cics15 cics3 cics4 ";;
zh) cicslist="S3YZMW S4YZMW cics10 cics12 cics12_2010 cics14 cics3 cics4 ";;
zs) cicslist="S3YZMW S4YZMW cics10 cics12 cics12_2010 cics14 cics3 cics4 ";;
sg) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics13 cics16 cics5 cics6 ";;
hy) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics14 cics16 cics5 cics6 ";;
cz) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics14 cics16 cics5 cics6 ";;
sw) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics14 cics16 cics5 cics6 ";;
fs) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics13 cics14 cics5 cics6 ";;
mm) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics13 cics16 cics5 cics6 ";;
yj) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics13 cics16 cics5 cics6 ";;
zj) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics13 cics16 cics5 cics6 ";;
dg) cicslist="S5YZMW S6YZMW cics11 cics12 cics12_2010 cics14 cics16 cics5 cics6 ";;
hz) cicslist="S1YZMW S2YZMW cics1 cics12 cics12_2010 cics13 cics2 cics9 ";;
st) cicslist="S1YZMW S2YZMW cics1 cics12 cics12_2010 cics13 cics2 cics9 ";;
jy) cicslist="S1YZMW S2YZMW cics1 cics12 cics12_2010 cics13 cics16 cics2 cics9 ";;
gz) cicslist="S1YZMW S2YZMW cics1 cics12 cics12_2010 cics13 cics16 cics2 cics9 ";;
sz) cicslist="S3YZMW S4YZMW cics10 cics12 cics12_2010 cics13 cics14 cics15 cics3 cics4 ";;
zq) cicslist="S1YZMW S2YZMW cics1 cics12 cics12_2010 cics13 cics16 cics2 cics9 ";;
*) echo "地市标识有误,如全省查地市标识为:all" ;;
esac


for cicsnum in $cicslist
do
  
mon=` print $2 |awk  '{print substr($0,5,2)}' `
year=`print $2 |awk  '{print substr($0,1,4)}'`
  dat=` date +%-m `
  year_s=` date +%-Y`
  if [ $year -eq $year_s ]
  then
      if [ $mon -eq $dat ]
         then 
             if [ -d /test/cxlog2/logbak/${cicsnum} ]
              then
               mulu=/test/cxlog2/logbak/${cicsnum}
              else
              mulu=/test/cxlog3/logbak/${cicsnum}
             fi
         else 
               if [ -d /test/cxlog2/oldlog/$year_s$mon/${cicsnum} ]
              then
               mulu=/test/cxlog2/oldlog/$year_s$mon/${cicsnum}
              else
              mulu=/test/cxlog3/oldlog/$year_s$mon/${cicsnum}
             fi
      fi
   else
               if [ -d /test/cxlog2/oldlog/$year$mon/${cicsnum} ]
              then
               mulu=/test/cxlog2/oldlog/$year$mon/${cicsnum}
              else
              mulu=/test/cxlog3/oldlog/$year$mon/${cicsnum}
             fi
     
   fi    

     echo "$mulu"
     Region=`echo $3 | tr [:lower:] [:upper:]`
     zgrep $1 ${mulu}/*${Region}*BSTR.out*$2* >cicslog_${olnynum}
if [ -s cicslog_${olnynum} ]
      then
###读取pid函数
      readpid()
      {
        echo "请输入你要查找的pid并按回车,如要退出请直接按回车"
      read cicspid
      if [ -z "$cicspid" ]
      then
       echo "脚本退出."
       exit
      fi
      }
      echo "------------------------------------------------------------------------------------------------------"
     while true
        do
      findnum=`awk  '{print $1,$2}' cicslog_${olnynum}|uniq|wc -l |awk '{print $1}'`
      if [ $findnum -gt 20 ]
        then
        echo "由于找出来的结果太多,只显示最后20条,建议填写更精确的时间或者另外找关键字"
        cat cicslog_${olnynum}|awk  '{print $1,$2}' |tail -20
        readpid
        elif [ $findnum -eq 1 ]
        then
        cicspid=`awk  -F/pid/= '{print $2}' cicslog_${olnynum}|tail -1|awk -F/: '{print $1}'`
        echo "pid只有一个,直接查找"
        cat cicslog_${olnynum}|awk  '{print $1,$2}' |uniq
      else
        cat cicslog_${olnynum}|awk  '{print $1,$2}' |uniq
        readpid
     
      fi
      onefile=`ls ${mulu}/*${Region}*BSTR.out*$2*|wc -l|awk '{print $1}'`
      if [ $onefile -eq 1 ]
       then
       zgrep $cicspid  ${mulu}/*${Region}*BSTR.out*$2* >cicslog_${olnynum}1
       else
       filenum=`grep $cicspid cicslog_${olnynum} | awk -F/: '{print $1}'|sort -n |uniq|wc -l |awk '{print $1}'`
       if [ $filenum -gt 1 ]
        then
         echo "你选择的PID“ ${cicspid} ”在${filenum}个文件中都有,请输入其中一个文件,要绝对路径"
         grep $cicspid cicslog_${olnynum} | awk -F/: '{print $1}'|sort -u|uniq
         read filename
         if [ -z "$filename" ]
         then
          echo "输入有误,可能你多按了一下回车,请重新运行脚本"
          exit
         fi
        else
         filename=`cat cicslog_${olnynum}|grep $cicspid  | awk -F/: '{print $1}'|tail -1`
       fi
       zgrep $cicspid  $filename>cicslog_${olnynum}1
      fi
      print "日志如下,请用”/${1}”查找"
      vi cicslog_${olnynum}1  
     if [ $findnum -eq 1 ]    
        then
        exit
     fi
    done
fi

      
done
}

if [ $3 == 'all' ]
then
 for city in jm mz qy yf zh zs sg hy cz sw fs mm yj zj dg hz st jy gz sz zq
 do
 subcics $1 $2 ${city}
 done
else
 subcics $1 $2 $3
fi

 

文件转移(自动压缩并上传文件)
find ./ -name "hkreq*" -atime +5 > /usr1/run/shell/user/qh/Deduct_req_Fx/hkreq
awk '{print "mv " $1 " /appdata/fileftp/zw/Deduct_req_Fx/sz/sz_bakto40/"}' /usr1/run/shell/user/qh/Deduct_req_Fx/hkreq > /usr1/run/s
hell/user/qh/Deduct_req_Fx/hkreq.sh
sh  /usr1/run/shell/user/qh/Deduct_req_Fx/hkreq.sh
cd /appdata/fileftp/zw/Deduct_req_Fx/sz_bakto40/
gzip hkreq*
ftp -i -n 10.2.207.208 <<EOF>/dev/null
user devis devis
cd /test/cxlog3/Deduct_req_Fx/sz/
bin
prompt
put hkreq*
bye
EOF
rm /appdata/fileftp/zw/Deduct_req_Fx/sz_bakto40/hkreq*
强制索引
select /*+ index(a,PK_CM_SUBS_SUBSCRIBER) */ a.servnumber,to_char(b.subsid),b.VALIDBILLCYC,to_char(b.ACCTID),b.RECAMT from test.sg_c
m_subs_subscriber a, sgzw.ib_cbtm_unwfacct b where a.subsid=b.subsid;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值