Acho que a maneira mais fácil de fazer isso seria fazer um teste para cada condição no nome de usuário. Desta forma, é fácil ver o que está acontecendo e é fácil de modificar e ampliar. Uma única expressão regular logo seria muito difícil de lidar.
/^[^a-z]/ { printf("Does not start with a letter:\t%s\n", $0) }
length > 8 { printf("Longer than 8 characters:\t%s\n", $0) }
/[^a-z0-9_.-]/ { printf("Contains disallowed characters:\t%s\n", $0) }
A única coisa a observar aqui é o traço ( -
) no último teste. Deve ser localizado primeiro ou último no [...]
.
Alimente o script awk com os nomes de usuário de /etc/passwd
:
$ cut -d ':' -f 1 /etc/passwd | awk -f usernamecheck.awk
Does not start with a letter: _portmap
Does not start with a letter: _identd
Does not start with a letter: _rstatd
Does not start with a letter: _rusersd
Does not start with a letter: _fingerd
Does not start with a letter: _x11
Does not start with a letter: _switchd
Does not start with a letter: _traceroute
Longer than 8 characters: _traceroute
(etc.)