Linux
帶有日期的腳本在 Linux 上工作,但在 AIX 上不工作
我編寫了一個腳本,它在 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