날짜가 포함된 스크립트는 Linux에서는 작동하지만 AIX에서는 작동하지 않습니다.

날짜가 포함된 스크립트는 Linux에서는 작동하지만 AIX에서는 작동하지 않습니다.

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

이것은 -dGNU date확장입니다( busybox하나도 있지만 ast-open date다르게 작동합니다).

그러나 AIX에는 이 기능이 포함되어 있으므로 GNU는 이전 근무일을 가져올 ksh93필요가 없습니다 .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

관련 정보