assistência com lista de scripts de usuários

0

Sou novo em scripts, até agora criei isto:

#!/bin/sh
(
echo List of users in PRD 

echo $(date)

cat /etc/passwd | awk -F: '{print $1,$3,$5}' | sort | \
while read username uid gecos
do
echo "${username}:${uid}:${gecos}"
done
) > 'hostname'_userlogins.txt
mailx -s file [email protected] < 'hostname'_userlogins.txt

Isso fornece uma lista de todos os usuários. Eu tenho outro arquivo (chamado ignore.txt ) que tem lista de usuários a serem excluídos antes de enviar o e-mail.

Como faço para vincular a lista com ignore.txt para filtrar?

    
por Zaira Zareena 24.04.2015 / 05:08

1 resposta

1

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 use date .
  • 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]
    
por 24.04.2015 / 05:19