シェルスクリプトで前日分のログを取得したいときなどに、今日ではない日付を変数として取得しておきたい場合があります。
単純な date コマンドだけで解決することがほとんどですが、/YYYY/MM/DD として分離する場合などは多少工夫が必要です。
基本のパターン。ほとんどはこれで解決。
今日の日付
[test@localhost ~]$ TODAY=$(date +%Y%m%d)
[test@localhost ~]$ echo "$TODAY"
20240612
[test@localhost ~]$
昨日の日付
[test@localhost ~]$ YESTERDAY=$(date -d "1 day ago" +%Y%m%d)
[test@localhost ~]$ echo "$YESTERDAY"
20240611
[test@localhost ~]$
/var/log/YYYY/MM/DD 等でアーカイブを残している場合などは YYYY, MM, DD それぞれを変数に入れたほうが楽なので、
TODAY を基準にしてそれぞれの値を取得していく。
[test@localhost ~]$ TODAY=$(date +%Y%m%d)
[test@localhost ~]$ YESTERDAY=$(date -d "$TODAY 1 day ago" +%Y%m%d)
[test@localhost ~]$ echo "$YESTERDAY"
20240611
[test@localhost ~]$
[test@localhost ~]$ YESTERDAY_YEAR=$(date -d "$TODAY 1 day ago" +%Y)
[test@localhost ~]$ YESTERDAY_MONTH=$(date -d "$TODAY 1 day ago" +%m)
[test@localhost ~]$ YESTERDAY_DAY=$(date -d "$TODAY 1 day ago" +%d)
[test@localhost ~]$
[test@localhost ~]$ echo "$YESTERDAY_YEAR"
2024
[test@localhost ~]$ echo "$YESTERDAY_MONTH"
06
[test@localhost ~]$ echo "$YESTERDAY_DAY"
11
[test@localhost ~]$
これで年初や月初の処理も対応ばっちりです。
[test@localhost ~]$ TODAY=$(date -d '2024-01-01' +%Y%m%d)
[test@localhost ~]$ echo "$TODAY"
20240101
[test@localhost ~]$
[test@localhost ~]$ YESTERDAY_YEAR=$(date -d "$TODAY 1 day ago" +%Y)
[test@localhost ~]$ YESTERDAY_MONTH=$(date -d "$TODAY 1 day ago" +%m)
[test@localhost ~]$ YESTERDAY_DAY=$(date -d "$TODAY 1 day ago" +%d)
[test@localhost ~]$
[test@localhost ~]$ echo "$YESTERDAY_YEAR"
2023
[test@localhost ~]$ echo "$YESTERDAY_MONTH"
12
[test@localhost ~]$ echo "$YESTERDAY_DAY"
31
[test@localhost ~]$
気に入ったらぜひ共有してください。