Linux

確定日期是否在 bash 中超過 90 天

  • February 8, 2021

如果使用者 AWS 訪問密鑰超過 90 天,我需要向安全團隊發出警報。我在 bash 中這樣做。

到目前為止,我的腳本正在輸出密鑰和日期,如下所示:

AKIAJS7KPHZCQRQ5FJWA : 2016-08-31T15:38:18Z
AKIAICDOHVTMEAB6RM5Q : 2018-02-08T03:55:51Z

如何在 bash 中使用該日期格式確定日期是否超過 90 天?

我正在使用 Ubuntu 18.04。我相信日期格式是 ISO 8601。如果這也是錯誤的,請確認/更正。

您可以使用 GNUdate將日期時間字元串轉換為秒數(從 1970 年 1 月 1 日的“時代”開始)。從那裡開始進行簡單的算術比較

datetime='2016-08-31T15:38:18Z'
timeago='90 days ago'

dtSec=$(date --date "$datetime" +'%s')    # For "now", use $(date +'%s')
taSec=$(date --date "$timeago" +'%s')

echo "INFO: dtSec=$dtSec, taSec=$taSec" >&2

[ $dtSec -lt $taSec ] && echo too old

下面的腳本將讀取您在上面提供的格式,但如果您已經在現有變數中有值,您可以合併程式碼:

#!/bin/bash
cutoff=$(date -d '90 days ago' +%s)
while read -r key colon date
do
 age=$(date -d "$date" +%s)
 if (($age < $cutoff))
 then
   printf "Warning! key %s is older than 90 days\n" "$key" >&2
 fi
done < input

引用自:https://unix.stackexchange.com/questions/453703