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

发布于 2024-08-24 12:05:58 字数 500 浏览 3 评论 0原文

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

这是我脚本的一部分,

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

我基本上需要以 201002 格式获取过去的日期。不要介意,在新环境中,%0m 表示“无零”,而实际上在另一个环境中,它表示“是的,请输入我的绳子上的那个零”。它甚至不接受“1个月前”。我读过 HP-UX 的 man date ,看来你不能用它进行日期算术。

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

谢谢!

Ok, so I need to translate a script from a nice linux & bash configuration to ksh in hp-ux. Each and every command expects a different syntax and i want to kill myself. But let's skip the rant.

This is part of my script

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

I basically need to get a past date in format 201002. Never mind the thing that, in the new environment, %0m means "no zeroes", while actually in the other one it means "yes, please put that zero on my string". It doesn't even accept the "1 month ago". I've read the man date for HP-UX and it seems you just can't do date arithmetic with it.

I've been looking around for a while but all i find are lengthy solutions. I can't quite understand that such a typical administrative task like adding dates needs so much fuss. Isn't there a way to convert my one-liner to, well, i don't know, another one? Come on, i've seen proposed solutions that used bc, had thirty plus lines and magic number all over the script. The simplest solutions seem to use perl... but i don't know how to modify them, as they're quite arcane.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夕色琉璃 2024-08-31 12:05:58

由于您的情况是年和月的简单情况,因此您始终可以制作自己的日期数组。例如,

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

since yours is simple case of year and month, you could always craft your own date arrays. eg

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

But note that it is only simple and serves to produce only previous 1 month.
You can also try the ksh script here

绻影浮沉 2024-08-31 12:05:58

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

创建一个 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

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

I know this is an old topic, but i had the same problem and this was the solution

Create a shell script, for example, 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

then you can call the script and assign to a variable

./last_month.sh | read anterior
echo $anterior

here returns the last month, but you can easily change to accept parameters

不回头走下去 2024-08-31 12:05:58

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

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

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

不管怎样,我觉得没有比这更简单的方法了。

This is the solution I came to (warning: I'm working at a client with draconian security measures, so i don't even have a way to test it, i need to send my scripts to a sysadmin to test them and debug through him).

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

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

Anyway, it strikes me that there is no simpler way to do that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文