Solaris CSH 脚本中的上个月日期

问题描述 投票:0回答:3

作为预先要求,我需要在 Unix (solaris) csh 中获取上个月的日期。

set Lmit_Date=`date --date='1 month ago' +%Y%m%d` 

以上命令将获取上个月的日期并在 Linux 服务器上运行良好。但是我们的服务器是 Solaris 并且提到的命令不起作用。

谁能建议我如何获取上个月的日期

unix solaris csh
3个回答
2
投票

问题是由于您使用的是 GNU 日期扩展。

--date
是非标准的。

此外,由于月份长度是可变的,GNU date 显示的日期可能是意外的,至少可以说......

例如今天是 3 月 31 日,但根据 GNU 日期,“上个月”日期是 3 月 2 日:

$ date +%Y%m%d
20160331
$ date --date='1 month ago' +%Y%m%d
20160302

如果您仍然想在 Solaris 上使用 GNU 日期或找到一些解决方法,请查看这些回复: https://stackoverflow.com/a/23507108/211665https://stackoverflow.com/a/17817087/211665


1
投票

您应该能够为您的 solaris 平台编译 coreutils,这将为您提供正确的日期实用程序。但是正如名称所说,coreutils 会覆盖核心实用程序,您可能希望将其安装到自定义路径中并通过您的特殊路径选择正确的日期命令,例如“/opt/coreutils/bin/date”。

另一种方法是使用符号日期输出拆分来计算上个月

eval `date +"set YEAR=%Y; set MONTH=%m ;set DAY=%d"`

现在您可以对“$YEAR”、“$MONTH”和“$DAY”进行操作了。例如

let 'MONTH--'
if [ "$MONTH" -eq 0 ]; then MONTH=12; let 'YEAR--'; fi
set Lmit_Date=`date --date "$MONTH$DAY0000$YEAR" +"%Y%m%d"`

有点。 (我习惯bash所以我不知道这里是否有

let
。但是还有一些其他方法可以进行shell计算。csh可能还有另一个关键字)。

您还需要使用 $DAY 参数注意每月的天数。


0
投票
function last_day {
  y=`echo $1 | cut -f1 -d "-"`
  m=`echo $1 | cut -f2 -d "-"`
  d=`cal ${m} ${y} | nawk 'NF{A=$NF}END{print A}'`

echo "$y $m $d" | nawk '{printf("%s-%02d-%02d",$1,$2,$3);}'
}           # last_day

last_day 2023-01-01

会给你:2023-01-31 在非 GNU Solaris 中。

© www.soinside.com 2019 - 2024. All rights reserved.