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
GNU 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