Uma abordagem possível com o grep
Do seu código, vejo que você está anexando ao userData
file, o que significa que os nomes dos arquivos aumentariam em seu sufixo numérico. Portanto, para obter o próximo sufixo disponível, poderíamos examinar o arquivo userData
com grep
e apenas contar o número de linhas em que o nome de usuário ocorre:
$ grep -c 'jsmit' users.txt
2
Claro, se o número retornado for 0, podemos simplesmente ignorar isso porque é um novo nome de usuário. Aqui está um pequeno script de como isso funcionaria:
#!/bin/bash
read -p "Enter first name: " firstname
read -p "Enter lastname: " lastname
username=$(printf "%s%s" "${firstname:0:1}" "${lastname:0:4}")
num=$( grep -c "$username" userData )
if [ "$num" -gt 0 ]; then
username="$username$num"
fi
echo "$username"
Teste com jsmit
e jsmit1
já no arquivo:
$ ./indexed_usernames.sh
Enter first name: john
Enter lastname: smith
jsmit2
No entanto, observe que essa é uma maneira muito ingênua e simplista, e presume que nenhum nome de usuário seja excluído ou esteja faltando índices e seja adicionado de forma linear.
Outras coisas a serem consideradas
-
Pelo que entendi, você está construindo um pequeno banco de dados de usuários no shell script. Considere esse caso: e se tivéssemos
jsmit
,jsmit1
ejsmit2
, mas depois removemosjsmit1
. Isso significa que o script deve considerar quais índices numéricos estão realmente disponíveis , caso contrário, se incrementarmos cegamente os números, isso pode resultar em uma colisão. -
Considere nomes de usuário em maiúsculas e minúsculas. Se eu inserir
John Smith
ejohn smith
, isso resultaria em uma colisão? Você deve converter todos os nomes de usuários em minúsculas primeiro e depois manipular colisões?