Por favor, esteja ciente de que o campo 8 em /etc/shadow
NÃO contém "data de expiração da senha", mas de acordo com man shadow
(no linux):
account expiration date
The date of expiration of the account, expressed as the number of days since Jan 1, 1970. Note that an account expiration differs from a password expiration. . . An empty field means that the account will never expire.
Você deseja "expiração de senha" ou "expiração de conta"?
Com o join
da sua pergunta, todos os campos "sombreados" serão alterados por 6 para uma avaliação mais aprofundada. O comando grep
é desnecessário; awk
pode fazer isso. Tente esta adaptação do seu one-liner:
join -1 1 -2 1 -t : /etc/passwd /etc/shadow | awk -F: -v"TD=$(date +%s)" 'BEGIN {TD = TD / 86400} $7 ~ /bash$/ {print $1, int($9-TD), $14?int($14-TD):"never"}' OFS=";"
user1;-1429;never
user2;-1429;never