Linux

帶有日期的腳本在 Linux 上工作,但在 AIX 上不工作

  • April 4, 2019

我編寫了一個腳本,它在 Linux 上執行良好,但在 AIX 7.2 上失敗。我的腳本使用date帶有-d 的命令。此腳本的目的是獲取不是星期六、星期日或節假日的最後一天。為了驗證一天是否是假期,我執行了一個查詢,傳遞了格式為 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

-d是一個 GNUdate擴展(雖然工作方式不同busybox,但也有一個)。ast-open date

不過AIX 是自帶的ksh93,所以不需要 GNUdate獲得前一個工作日:

day=2016-01-01
previous_working_day=$(D=$day ksh93 -c '
 printf "%(%F)T" "$D, $(($(printf "%(%w)T" "$D") == 1 ? 3 : 1)) day ago"')
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

引用自:https://unix.stackexchange.com/questions/510371