Você pode usar grep para filtrar nomes de usuário:
grep -wvf ignore.txt /etc/passwd | awk ...
grep é usado para pesquisar padrões geralmente, mas com -v pode ser usado para negar a pesquisa e, portanto, para filtrar. As correspondências podem ser um pouco amplas (por exemplo, joe filtrará joe e joey ), portanto use -w para restringir seu efeito a correspondências de palavras inteiras.
Outras sugestões:
-
awkpode ser solicitado a imprimir com dois-pontos, poupando o problema do loop:grep -wvf ignore.txt /etc/passwd | awk -F: -v OFS=: '{print $1, $2, $3}' -
echo $(date)é inútil. Apenas usedate. -
Use
teepara gravar em um arquivo e novamente no canal:) | tee "$(hostname)"_userlogins.txt | mail ...
No geral, o script pode ser simplificado para:
#!/bin/sh
(
echo List of users in PRD
date
grep -wvf ignore.txt /etc/passwd | awk -F: -v OFS=: '{print $1,$3,$5}' | sort
) | tee "$(hostname)"_userlogins.txt |
mailx -s file [email protected]