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
1つもありますが、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