Você parece estar com a bola, então não vou te dar um roteiro, mas aqui estão algumas dicas:
-
Você está usando
awkincorretamente. 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
awkcomo 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 processoawkseparado para cada linha, portanto, isso é muito mais eficiente. -
Adicione uma verificação em seu programa
awkpara 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
awkpara$1para 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
$6em # 1 de acordo. -
Conforme o comentário de Jeff Schaller, modifiquei o programa
awkpara contabilizar um UID mínimo personalizado. A formaawksignifica definir o valor como 1000, caso contrário, seria nulo ou não definido.