日付を含むスクリプトは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

これは-dGNUdate拡張です(busybox1つもありますが、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

関連情報