我编写了一个脚本,该脚本在 Linux 上运行良好,但在 AIX 7.2 上失败。我的脚本使用带 -d 的命令date
。该脚本的目的是获取不是周六、周日或节假日的最后一天。为了验证某一天是否是假期,我执行了一个查询,并以 YYYY-MM-DD 格式传递日期。
脚本是这样的:
D_MINUS_ONE=
GetLastDay()
{
current_day=""
day_of_week=$(date -d "$1 -1 days" +'%w')
if [ $day_of_week -eq 0 ]
then
current_day=$(date -d "$1 -3 days")
else
current_day=$(date -d "$1 -1 days")
fi
db2 -x "SELECT COUNT(*) FROM HOLIDAY WHERE DT_HOLIDAY='$(date -d "$current_day" +'%Y-%m-%d')'" | read lines
if [ lines -gt 0 ]
then
GetLastDay $(date -d "$current_day" +'%Y-%m-%d')
fi
D_MINUS_ONE=$(date -d "$current_day" +'%Y-%m-%d')
}
GetLastDay $1
echo $D_MINUS_ONE
答案1
这-d
是一个 GNUdate
扩展(busybox
也ast-open
date
有一个,但工作方式不同)。
不过AIX 自带了ksh93
,所以 GNU 不需要date
获取前一个工作日:
day=2016-01-01
previous_working_day=$(D=$day ksh93 -c '
printf "%(%F)T" "$D, $(($(printf "%(%w)T" "$D") == 1 ? 3 : 1)) day ago"')
答案2
D_MINUS_ONE=
GetLastDay()
{
last_day=$(D=$1 ksh93 -c 'printf "%(%F)T" "$D, $(($(printf "%(%w)T" "$D") == 1 ? 3 : 1)) day ago"')
db2 -x "SELECT COUNT(*) FROM HOLIDAY WHERE DT_HOLIDAY='$last_day'" | read lines
if [ lines -gt 0 ]
then
GetLastDay $last_day
fi
D_MINUS_ONE=$last_day
}
GetLastDay $1
echo $D_MINUS_ONE