Você pode fazer:
#!/bin/bash
## Reading "/var/etc/user.cfg", saving the line being read in variable "line"
while read -r line; do
## Getting the username from "user.cfg", saving in variable "user"
user="$(grep -Po '^F:\s+\K[^\s]+' <<<"$line")"
## Getting the expiry date from "user.cfg", saving in variable "exp_cfg"
exp_cfg="$(grep -Po 'enddate=\K[^\s]+' <<<"$line")"
## Getting expiry time, days since Epoch from
## "/etc/shadow" into variable "exp_shadow"
exp_shadow="$(sudo grep -Po "^$user:.*:\K[^:]+(?=:[^:]*$)" /etc/shadow)"
## Check if "exp_shadow" is not Null
[[ -n $exp_shadow ]] &&
## If not null, then convert the date from "exp_cfg" into days
## since epoch and then check if its less than "exp_shadow"
## Replace ">" with "<" if you want to see the expired accounts :)
(( $exp_shadow > $(($(date '+%s' <<<"$exp_cfg")/86400)) )) &&
## If so, print the line
echo "$line"
done </var/etc/user.cfg
Salvar como, por exemplo, user_exp_check.sh
, agora você pode ver os usuários com conta não expirada executando o seguinte (supondo que você esteja no diretório do script):
bash user_exp_check.sh
Para salvar a saída em um novo arquivo, por exemplo new_user.cfg
:
bash user_exp_check.sh >new_user.cfg
Depois, você pode remover o antigo arquivo /var/etc/user.cfg
.