• 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)

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

  • 相关阅读:
    Javascript面向对象(三):非构造函数的继承
    Javascript面向对象(二):构造函数的继承
    Javascript 面向对象(一):封装
    .NET面试题系列[12]
    .NET面试题系列[11]
    .NET面试题系列[10]
    .NET面试题系列[9]
    .NET面试题系列[8]
    .NET面试题系列[7]
    .NET面试题系列[6]
  • 原文地址:https://www.cnblogs.com/flyback/p/8004932.html
Copyright © 2020-2023  润新知