0

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

这是我脚本的一部分

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

我基本上需要以 201002 格式获取过去的日期。没关系,在新环境中,%0m 表示“没有零”,而实际上在另一个环境中它表示“是的,请在我的字符串上加上零” . 它甚至不接受“1 个月前”。我已经阅读了 HP-UX 的 man date,看来您无法用它进行日期运算。

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

谢谢!

4

3 回答 3

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 脚本

于 2010-03-12T09:55:30.503 回答
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

这里返回上个月,但您可以轻松更改以接受参数

于 2016-08-31T20:58:49.233 回答
0

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

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

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

无论如何,让我感到震惊的是,没有更简单的方法可以做到这一点。

于 2010-03-12T10:03:08.263 回答