The "policy" on quotation marks is to put them around any variable that might be empty. That way, after variables have been expanded, there will at least be a set of empty quotes to denote a null value, rather than absolutely nothing, generating a syntax error.
Code:
# Script without quotes:
if [ $choice = 1 ] ;
# after variable expansion, when $choice is null:
if [ = 1 ] ;
# error!
# Script with quotes:
if [ "$choice" = 1 ] ;
# after variable expansion, $choice is null:
if [ "" = 1 ] ;
# syntax is okay, test fails since "" does not equal 1
Your integer comparison fails when $choice is empty because it is expecting an integer to compare to an integer, and can't compare a blank space to an integer. Considering you're looking at user input, you should probably stick to string (unary) comparison, since a user could type in anything and cause the script to error out.
It helps to put a "set -x" before a section of script that's giving you problems.