确定 bash 中的日期是否超过 90 天

确定 bash 中的日期是否超过 90 天

如果用户 AWS 访问密钥超过 90 天,我需要向安全团队发出警报。我正在 bash 中执行此操作。

到目前为止,我的脚本输出的键和日期如下:

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

如何使用 bash 中的日期格式确定日期是否已超过 90 天?

我使用的是 Ubuntu 18.04。我相信日期格式是 ISO 8601。如果有错误,请确认/更正。

答案1

您可以使用 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

答案2

下面的脚本将读取上面提供的格式,但如果您已经在现有变量中拥有值,则可以合并代码:

#!/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

相关内容