определить, находится ли дата за пределами 90 дней в bash

Мне нужно отключить оповещение для службы безопасности, если ключи доступа пользователей AWS превышают 90 дней. Я делаю это в Bash.

Пока что мой скрипт выводит ключи и даты примерно так:

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

Как мне справиться с определением, если дата старше 90 дней, используя этот формат даты в Bash?

Я использую Ubuntu 18.04. Я считаю, что формат даты – ISO 8601. Пожалуйста, подтвердите / исправьте, если это также неверно.

Вы можете использовать GNU date для преобразования строки даты-времени в количество секунд (начиная с «эпохи», 1 января 1970 года). Оттуда это простое арифметическое сравнение

 datetime='2016-08-31T15:38:18Z' timeago='90 days ago' dtSec=$(date --date "$datetime" +'%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