Whenever you post a script, command output, or similar text, it's useful to readers to place that text between code tags. For instance, if you were to type in your post/response/message:
[code]This is standard width text.
It's easier to read code/output with
[/code]
You would get a box like below:
Code:
This is standard width text.
It's easier to read code/output with
Doing so will make your question much more answer-receiving friendly.
To your question... Your loop is started with:
Code:
while [ "$guess" = "$name" ]; do
Therefore, your loop will continue to execute for so long as $guess equals $name. Once your script enters the loop, I do not see a change to $guess nor $name. If neither of those variables change, your loop will never terminate, because the condition is always true.
EDIT:
As a side note, the structure of your script does not match what you're (probably) aiming for. My guess is your intent is to loop around the menu-input sequence until the user selects a valid option. Then process the selection--knowing that the input is valid. If so, your loop is in the wrong place.
EDIT2:
My mistake... the bash man page says that the select construct repeatedly asks for valid input. So you can probably safely ignore my earlier edit.