Los dos ejercicios se hacer exactamente igual, así que si sabes hacer uno, deberías poder construir el otro. De todos modos, yo no usaría grep+cut, sino que echaría mano de awk que me permite filtrar. También sed, pero es más engorroso.
De hecho, un programa así ni siquiera necesita estar escrito en bash: se puede escribir directamente en awk
#!/usr/bin/awk -f
BEGIN { FS=":" }
$1 == USUARIO { print $2,$3 ; exit }
Listo. Se ejecuta así:
$ ./script1.awk -v USUARIO=fulano cumples.txt
Eso sí, la entrada de datos la estoy metiendo por la línea de comandos y no mediante ninguna pregunta, cosa a la que no sé si obliga el enunciado. En ese caso, también es fácil:
#!/usr/bin/awk -f
BEGIN {
FS=":"
print "Escriba el usuario"
getline USUARIO < "/dev/stdin"
}
$1 == USUARIO { print $2,$3 ; exit }
¡Ah! El exit lo usa para salirme, porque el nombre de usuario es único, así que cuando he encontrado uno, dejo de seguir leyendo el fichero.
Lo equivalente en tu script sería añadirle a grep el parámetro -m1 (que no estaría de más que lo incluyeses).