如何在shell脚本中更改月份

时间:2016-01-06 22:45:00

标签: bash shell ksh

我需要在每个月的脚本中更改以下值。我在HP-UX环境中使用ksh shell。每个月有4件事需要改变,即当前月份(我得到它),上个月,脚本中的任何月份应该在下个月递增(APR到MAY),值2016-05和2016-06应该下个月采用值2016-06和2016-07。请让我知道命令和可能的方法。

注意:上个月和分区名称相同,但它们并不总是相同。

我的脚本是

curmon=$(echo `date +'%b'`|tr -s '[:lower:]' '[:upper:]')

This month is ${curmon}.

Previous month is ${premon}.

alter table test add PARTITION test_APR01
VALUES LESS THAN (TO_DATE(' 2016-05-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace abc;

alter table test add PARTITION test_APR02
VALUES LESS THAN (TO_DATE(' 2016-05-25 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace abc;

alter table test add PARTITION test_APR03
VALUES LESS THAN (TO_DATE(' 2016-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace abc;

我应该得到这样的输出。

This month is JAN.

Previous month is DEC.

alter table test add PARTITION test_MAY01
VALUES LESS THAN (TO_DATE(' 2016-06-22 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace abc;

alter table test add PARTITION test_MAY02
VALUES LESS THAN (TO_DATE(' 2016-06-25 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace abc;

alter table test add PARTITION test_MAY03
VALUES LESS THAN (TO_DATE(' 2016-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace abc;

2 个答案:

答案 0 :(得分:1)

您可以使用now选项将date以外的日期传递给--date。 E.g:

date --date "Last month" +%b

将返回(截至今天)dec

有关详细信息,请参阅info docs

关于其他价值观,我不太清楚你的意思。它应该依赖于之前脚本中的任何内容吗?听起来像你有一个基础值 - 我认为你应该能够用相同的机制解决这个问题。例如:

date --date "2016-06-22 +1 month" +%F
2016-07-22

答案 1 :(得分:0)

这个怎么样?

YEST=$(echo $(date +%s) - 60*60*24 | bc);python -c "import datetime;print(datetime.datetime.fromtimestamp(int($YEST)).strftime('%Y-%m-%d %H:%M:%S'))"

结果。

  

2016-01-06 15:52:03

第一。改变" YEST"

位2st。更改为所需的格式  " strftime('%Y-%m-%d%H:%M:%S')"

其他语言(php或perl)也可以这样做