determina se a data está além de 90 dias no bash

1

É necessário disparar um alerta para a equipe de segurança se as chaves de acesso dos usuários da AWS ultrapassarem 90 dias. Eu estou fazendo isso no bash.

Até agora, meu script está exibindo as chaves e as datas como esta:

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

Como faço para determinar se a data tem mais de 90 dias usando esse formato de data no bash?

Estou usando o Ubuntu 18.04. Eu acredito que o formato de data é ISO 8601. Por favor confirme / corrija se está errado também.

    
por user99201 05.07.2018 / 20:43

2 respostas

2

Você pode usar o GNU date para converter uma cadeia de data e hora em um número de segundos (desde "a época", 1º de janeiro de 1970). A partir daí, é uma simples comparação aritmética

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
    
por 05.07.2018 / 20:58
1

O script abaixo lerá o formato que você apresentou acima, mas se você já tiver os valores nas variáveis existentes, poderá consolidar o código:

#!/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
    
por 05.07.2018 / 21:08

Tags