免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5647 | 回复: 24
打印 上一主题 下一主题

急求助:如何让Shell自动更新开始时间和结束时间 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-18 15:43 |只看该作者 |倒序浏览
本帖最后由 cognizanthunter 于 2012-06-18 19:46 编辑

大家好,我是Shell新手,现在项目上需要我写个Shell脚本,实现的功能就是自动更新开始时间和结束时间。具体请看下面:

要求:1.时间格式必须是 DD-MON-YY HH24:MI:SS
        2.开始时间默认是当天的12:15 AM,结束时间是当前时间;下次自动更新的时候, 当前开始时间是上次的结束时间,当前结束时间是current time即当前时间。

在一个参数文件中定义了开始时间和结束时间这两个变量START_TSTP和END_TSTP,shell脚本要根据上面的这两个要求自动更新这两个时间。

参数文件:param.prm
START_TSTP=13-JAN-12 12:15:00
END_TSTP=13-JUN-12 14:19:00

请高手帮写下这个脚本,谢谢。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-06-19 08:34 |只看该作者
本帖最后由 rdcwayx 于 2012-06-19 08:36 编辑

不清楚你如何判断结束时间,只能这样假设。
  1. START_TSTP="`date "+%d-%b-%y" ` 12:15:00"
  2. while true
  3. do
  4.    # Put your command here.
  5.    END_TSTP=`date "+%d-%b-%y %H:%M:%S" `
  6.    # report start and end time:
  7.    echo "The application run from $START_TSTP and stopped at $END_TSTP"
  8.    sleep 10
  9.    START_TSTP=$END_TSTP
  10. done
复制代码

论坛徽章:
0
3 [报告]
发表于 2012-06-19 08:40 |只看该作者
没明白意思,你是要修改 param.prm 文件 还是 根据这个 文件 来修改 某某某

论坛徽章:
0
4 [报告]
发表于 2012-06-19 22:55 |只看该作者
需求是这样的:
我们有个参数文件,大致如下:
Param.prm文件
$DBConnection_GIM=
$$EXTRACT_TYPE=ISSUER
$$START_TSTP=13-JAN-12 14:00:00
$$END_TSTP=13-JUN-12 14:19:00
$$VER_NUM=4.0
$$MSG_TYPE=FULL
$$MSG_LOV=
$$INSTR_TYPE_LIST=
$Param_EXTRACT_QUERY=

我们ETL过程要调用这个参数文件,但是每次调用的时候,参数文件里面的$$START_TSTP和$$END_TSTP都要自动更新。

现在就是要用脚本实现这个功能,不知道我是否表达清楚。

论坛徽章:
0
5 [报告]
发表于 2012-06-19 22:56 |只看该作者
需求已更新回复 2# rdcwayx


   

论坛徽章:
0
6 [报告]
发表于 2012-06-19 22:57 |只看该作者
需求已更新回复 3# wsxedcer


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2012-06-20 08:39 |只看该作者
cognizanthunter 发表于 2012-06-19 22:55
需求是这样的:
我们有个参数文件,大致如下:
Param.prm文件

  1. #! /usr/bin/bash

  2. PARA=Param.prm

  3. # Get start time
  4. START_TSTP=`date "+%d-%b-%y %H:%M:%S" `

  5. # Put your ETL command here.

  6. # Get end time
  7. END_TSTP=`date "+%d-%b-%y %H:%M:%S" `

  8. # update start and end time in Param.prm file
  9. awk -v s="$START_TSTP" -v e="$END_TSTP" '/START_TSTP/{$2=s}/END_TSTP/{$2=e}1' FS="=" OFS="=" $PARA > temp.file
  10. mv temp.file > $PARA

  11. echo "The application run from $START_TSTP and stopped at $END_TSTP"
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-06-20 15:01 |只看该作者
谢谢,可以实现更新时间,但是有点小问题,麻烦再帮看下。
参数文件: /amphome/mezong/ParamFiles/param_P63B_GIM_Aggregator_IssuerForScript.prm

################ PARAMETER FILE FOR P63B GIM ################

[Global]
$DBConnection_GSSM=GSSM_E1
$$EXTRACT_TYPE=ISSUER
$$START_TSTP=13-JAN-12 14:00:00
$$END_TSTP=13-JUN-12 14:19:00
$$VER_NUM=4.0
$$MSG_TYPE=FULL
$$MSG_LOV=
$$INSTR_TYPE_LIST=
$Param_EXTRACT_QUERY=SELECT NULL AS INSTR_TYP_CD,a.INSTR_ISSUER_ID || '||' ||    Greatest(a.efct_tstp,NVL(b.efct_tstp,a.efct_tstp),NVL(c.efct_tstp,a.efct_tstp)) ||'|Issuer|FinInstIds|' || a.INSTR_ISSUER_ID_XML_OBJ || '|Issuer|Indicative|' || b.INSTR_ISSUER_IND_XML_OBJ || '|Issuer|Analytics|' || c.INSTR_ISSUER_ANLY_XML_OBJ || '|ISSUER|' AS XML_OBJECT FROM (SELECT * FROM SMEXTN01.INSTR_ISSUER WHERE EFCT_TSTP <> EXPR_TSTP ) a LEFT JOIN (SELECT * FROM SMEXTN01.INSTR_ISSUER_IND WHERE EFCT_TSTP <> EXPR_TSTP )  b ON a.INSTR_ISSUER_ID = b.INSTR_ISSUER_ID AND a.INSTR_ISSUER_VRSN_NBR = b.INSTR_ISSUER_VRSN_NBR  LEFT JOIN (SELECT * FROM SMEXTN01.INSTR_ISSUER_ANLY WHERE EFCT_TSTP <> EXPR_TSTP )  c ON a.INSTR_ISSUER_ID = c.INSTR_ISSUER_ID AND a.INSTR_ISSUER_VRSN_NBR = c.INSTR_ISSUER_VRSN_NBR  WHERE a.efct_tstp BETWEEN to_timestamp('$$START_TSTP','DD-MON-YY HH24:MI:SS') AND to_timestamp('$$END_TSTP','DD-MON-YY HH24:MI:SS')  OR b.efct_tstp BETWEEN to_timestamp('$$START_TSTP','DD-MON-YY HH24:MI:SS') AND to_timestamp('$$END_TSTP','DD-MON-YY HH24:MI:SS')    OR c.efct_tstp BETWEEN to_timestamp('$$START_TSTP','DD-MON-YY HH24:MI:SS') AND to_timestamp('$$END_TSTP','DD-MON-YY HH24:MI:SS')

脚本如下:
#!/bin/bash

#!/bin/sh

PARA=/amphome/mezong/ParamFiles/param_P63B_GIM_Aggregator_IssuerForScript.prm

# Get start time
START_TSTP=`grep '$$END_TSTP=' $PARA | cut -d"=" -f2`

# Put your ETL command here.

# Get end time
END_TSTP=`date '+%d-%b-%y %H:%M:%S'`

# update start and end time in Param.prm file
awk -v s="$START_TSTP" -v e="$END_TSTP" '/START_TSTP/{$2=s}/END_TSTP/{$2=e}1' FS="=" OFS="=" $PARA > temp.file
mv temp.file $PARA

echo "The application run from $START_TSTP and stopped at $END_TSTP"


运行完的结果是 时间更新了,但是参数文件里面的 $Param_EXTRACT_QUERY 部分也被替换了。请看运行完后的参数文件:

################ PARAMETER FILE FOR P63B GIM ################

[Global]
$DBConnection_GSSM=GSSM_E1
$$EXTRACT_TYPE=ISSUER
$$START_TSTP=13-JUN-12 14:19:00
$$END_TSTP=20-Jun-12 01:55:12
$$VER_NUM=4.0
$$MSG_TYPE=FULL
$$MSG_LOV=
$$INSTR_TYPE_LIST=
$Param_EXTRACT_QUERY=20-Jun-12 01:55:12= b.INSTR_ISSUER_ID AND a.INSTR_ISSUER_VRSN_NBR = b.INSTR_ISSUER_VRSN_NBR  LEFT JOIN (SELECT * FROM SMEXTN01.INSTR_ISSUER_ANLY WHERE EFCT_TSTP <> EXPR_TSTP )  c ON a.INSTR_ISSUER_ID = c.INSTR_ISSUER_ID AND a.INSTR_ISSUER_VRSN_NBR = c.INSTR_ISSUER_VRSN_NBR  WHERE a.efct_tstp BETWEEN to_timestamp('$$START_TSTP','DD-MON-YY HH24:MI:SS') AND to_timestamp('$$END_TSTP','DD-MON-YY HH24:MI:SS')  OR b.efct_tstp BETWEEN to_timestamp('$$START_TSTP','DD-MON-YY HH24:MI:SS') AND to_timestamp('$$END_TSTP','DD-MON-YY HH24:MI:SS')    OR c.efct_tstp BETWEEN to_timestamp('$$START_TSTP','DD-MON-YY HH24:MI:SS') AND to_timestamp('$$END_TSTP','DD-MON-YY HH24:MI:SS')


我们参数文件里面其他的参数值不能替换的,我们ETL需要调用时间更新后的这个参数文件。

论坛徽章:
0
9 [报告]
发表于 2012-06-20 15:36 |只看该作者
awk -v s="$START_TSTP" -v e="$END_TSTP" '/START_TSTP/{$2=s}/END_TSTP/{$2=e}1' FS="=" OFS="=" $PARA > temp.file
这句是什么意思啊?
回复 7# rdcwayx


   

论坛徽章:
0
10 [报告]
发表于 2012-06-20 17:18 |只看该作者
这个错误是因为这个参数  $Param_EXTRACT_QUERY  里面也用到了 $$START_TSTP 和 $$END_TSTP
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP