使用ksh在HP-UX中过去日期

时间:2010-03-12 09:34:49

标签: date ksh hp-ux

好的,所以我需要从一个不错的linux&翻译脚本。 bsh配置为hp-ux中的ksh。每个命令都需要不同的语法,我想要自杀。但是,让我们跳过咆哮。

这是我脚本的一部分

anterior=`date +"%Y%0m" -d '1 month ago'`

我基本上需要以201002的格式获取过去的日期。不用担心,在新环境中,%0m表示“没有零”,而实际上在另一个中它意味着“是的,请把它放在零上”我的字符串“。它甚至不接受“1个月前”。我已经阅读了HP-UX的人员日期,看起来你不能用它进行日期算术。

我一直在寻找一段时间,但我找到的都是冗长的解决方案。我不太明白,像添加日期这样的典型管理任务需要大惊小怪。难道没有办法将我的单行转换为,我不知道,另一个?来吧,我已经看到了使用bc的建议解决方案,在脚本上有三十多行和魔术数字。最简单的解决方案似乎使用perl ...但我不知道如何修改它们,因为它们非常神秘。

谢谢!

3 个答案:

答案 0 :(得分:1)

因为你的年份和月份很简单,你总是可以制作自己的日期数组。例如

year=`date +%Y`
month=`date +%m`
anterior=`awk -vm="$month" -vyr="$year" 'BEGIN{
  mth["01"]="12"; mth["02"]="01"
  mth["03"]="02"; mth["04"]="03"
  mth["05"]="04"; mth["06"]="05"
  mth["07"]="06"; mth["08"]="07"
  mth["09"]="08"; mth["10"]="09"
  mth["11"]="10"; mth["12"]="11"
  if ( m=="01") { yr-- }
  print yr mth[m]
}' `
echo $anterior

但请注意,它只是简单而且仅用于生产前1个月。 您也可以尝试使用ksh脚本here

答案 1 :(得分:1)

我知道这是一个老话题,但我有同样的问题,这就是解决方案

创建一个shell脚本,例如last_month.sh

year=`date +%Y`
month=`date +%m`

month=`expr $month - 1`

if [ $month -eq 0 ]; then
   month=12
   year=`expr $year - 1`
fi

if [ $month -lt 10 ] then
   month="0$month"
fi

echo $year$month
exit 0

然后你可以调用脚本并分配给变量

./last_month.sh | read anterior
echo $anterior

此处返回上个月,但您可以轻松更改为接受参数

答案 2 :(得分:0)

这是我遇到的解决方案(警告:我在客户端使用严格的安全措施,所以我甚至没有办法测试它,我需要将我的脚本发送到系统管理员来测试它们并通过他调试。)

typeset -Z2 lastmonth
month=`date +%m`
year=`date +%Y`

lastmonth=$((month-1))
if (( month == 1));then
lastmonth=12
year=$((year-1))
fi

无论如何,我觉得没有更简单的方法可以做到这一点。