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:
-
awk
pode 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
tee
para 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]