Altere sua definição de variável NAME
para que ela retorne o nome da pessoa e possamos testá-la. O primeiro pensamento pode ser algo como
NAME="$(sed -n "${NAMEID}p" namelist)"
Mas isso tem problemas potenciais com o NAMEID contendo dados inválidos (e se alguém digitar "olá" ou "-10" ...).
Então, em vez disso, usaremos awk
:
NAME="$(awk -vNAMEID="$NAMEID" 'NR==NAMEID { print ; exit }' namelist)"
Agora, estará vazio se o valor estiver fora do intervalo ou mantenha o nome do usuário.
$ cat namelist
george
cindy
chester
$ cat tstscript
getname()
{
while [ true ]; do
read -p "Who are you? " NAMEID
NAME="$(awk -vNAMEID="$NAMEID" 'NR==NAMEID { print ; exit }' namelist)"
if [ -n "$NAME" ]
then
echo "Hello $NAME."
return
else
echo "Sorry, that's not a valid name."
fi
done
}
getname
$ bash tstscript
Who are you? 4
Sorry, that's not a valid name.
Who are you? hello
Sorry, that's not a valid name.
Who are you? -45
Sorry, that's not a valid name.
Who are you? 2
Hello cindy.