zoukankan      html  css  js  c++  java
  • Shell脚本中时间处理

    Shell脚本中时间处理

    1.脚本内容

    #!/bin/bash

    #环境变量

    #设置环境变量和sql文件格式相符

    source /etc/profile
    export LD_LIBRARY_PATH="/usr/lib/oracle/12.1/client64/lib"

    export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"

    export LANG=en_US.UTF-8

    date=`cat /home/oracle/channelMonitoring/date/trade_zf`

    sysdate=`date +"%s"`

    date2=`date +"%s" -d "${date}"`

    x=`expr ${date2} - ${sysdate}`

    if [ $x -lt 1800 ]; then

    #初始变量

    CHECKORAHOST=172.16.219.101

    FILEDIR="/home/oracle/channelMonitoring"

    SQLDIR="${FILEDIR}/sql/trade_zf.sql"

    DATADIR="${FILEDIR}/data/trade_zf.txt"

    DATEFLAG="/home/oracle/channelMonitoring/date/trade_zf"

    cat /dev/null >  ${SQLDIR}

    cat /dev/null >  $DATADIR

    echo -n "select  ('trade_zf'||',trade_code='||tr.trade_code||',status='||tr.status||',merchant='||m.merchant_code||',channel='||tr.bank_code||',bank='||tr.fld3||' value='||(case when tr.status=2 then 1 else 0 end)||' '||ceil((tr.trade_end_time - to_date('1970-01-01','yyyy-mm-dd'))*86400 - TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))*3600)||round(dbms_random.value(100000000,999999999)) ) as "插入语句" from tvpay2.trade_record tr

            join tvpay2.merchant m on tr.provider_id = m.id

            where (tr.trade_code  like 'ZF%' or tr.trade_code = 'DK0003' or tr.trade_code = 'DK0026' ) and ((to_date('$date', 'yyyy-mm-dd hh24:mi:ss')-to_date('1970-01-01','yyyy-mm-dd hh24:mi:ss'))*86400 - (tr.trade_end_time-to_date('1970-01-01','yyyy-mm-dd hh24:mi:ss'))*86400) between 0 and  1800 and tr.status in (2,3);

    " >> $SQLDIR

    sqlplus -s user/password@x.x.x.x:1521/orcl<<EOF

    set echo off;

    set feedback off;

    set head off;

    set pagesize 0;

    set linesize 433;

    set termout off;

    define fi1= '${DATADIR}'

    prompt *** Spooling to &fi1

    spool &fi1

    @${SQLDIR};

    spool off;

    exit;

    EOF

    sed  -i  's/[ ]*$//g'  ${DATADIR}

    curl -i -XPOST 'http://x.x.x.x:8086/write?db=monitor' --data-binary @${DATADIR}

    date2=`date +"%s" -d "${date}"`

    date3=1800

    nextdate=`expr $date2 + $date3`

    echo $nextdate

    nextdate=`date -d @${nextdate} "+%Y-%m-%d %H:%M:%S"`

    cat /dev/null > ${DATEFLAG}

    echo ${nextdate}  >> ${DATEFLAG}

    else

    echo "已经执行过了,请过30分钟之后在执行。"

    fi

    2.注意事项

    2.1清空文件

    cat /dev/null > 目标文件                           ###echo "" > 目标文件有空行

    2.2shell调用sql文

    汉字以及双引号需要使用转义字符字符

    2.3sql文调用shell变量

    ‘${date}’ 需要加单引号

    2.4算法使用

    expr 以及if语句中的判断使用lt

    ###备注

    export LD_LIBRARY_PATH="/usr/lib/oracle/12.1/client64/lib"

    在定时任务中,没有这行,可能执行会报错

    ###备注

    export NLS_LANG="AMERICAN_AMERICA.UTF8"

    放在配置文件中,防止中文乱码

    start_seconds=$(date --date="$starttime" +%s)

    如何将一个时间格式的变量变换成秒

  • 相关阅读:
    图书管理系统---基于form组件和modelform改造添加和编辑
    Keepalived和Heartbeat
    SCAN IP 解释
    Configure Active DataGuard and DG BROKER
    Oracle 11gR2
    我在管理工作中積累的九種最重要的領導力 (李開復)
    公募基金公司超融合基础架构与同城灾备建设实践
    Oracle 11g RAC for LINUX rhel 6.X silent install(静默安装)
    11gR2 静默安装RAC 集群和数据库软件
    Setting Up Oracle GoldenGate 12
  • 原文地址:https://www.cnblogs.com/flyback/p/8004932.html
Copyright © 2011-2022 走看看