Você parece estar com a bola, então não vou te dar um roteiro, mas aqui estão algumas dicas:
-
Você está usando
awk
incorretamente. Tente isso:awk -F: -v uid_min=${UID_MIN:-1000} '$3%2==0 && $3>uid_min && $3!=65534{print $6}' /etc/passwd
-
Não há necessidade de
cat
. -
Use sua saída
awk
como entrada para o loopread
, ou seja. %código%. Entenda que isso significará que apenas um processowhile read USER_HOME_DIR ; do ... ; done < $(awk...)
precisa ser gerado, enquanto o script original gera um processoawk
separado para cada linha, portanto, isso é muito mais eficiente. -
Adicione uma verificação em seu programa
awk
para limitá-lo a UIDs acima de 1000, ou você executará inadvertidamente sua cópia para muitos usuários do sistema. -
Observe que, no número 1 acima, alterei seu
awk
para$1
para puxar o diretório pessoal do usuário em vez do nome do usuário. -
Acabei de notar em minha máquina debian que existe um usuário 'nobody' com o UID 65534, portanto, talvez seja necessário contabilizar isso. Eu modifiquei a declaração
$6
em # 1 de acordo. -
Conforme o comentário de Jeff Schaller, modifiquei o programa
awk
para contabilizar um UID mínimo personalizado. A formaawk
significa definir o valor como 1000, caso contrário, seria nulo ou não definido.