conditional Testing numeric and text values problems

hi, when i type in a value higher than 20 it will show me the validation but if i put a negative figure it just goes goes blank where i just keep typing and nothing happens so i had to control c to exit out the process, can someone help me please.

clear
        read -p "please enter professionalism score:" prof1
                echo -e "\n"
output=$(grep -w "$prof1" appraisalrecord)
output4=$(echo $prof1 | tr -dc '[:digit:]')
        if [[ $prof1 -gt 20 && $prof1 -le -1 ]]; then
                echo "please enter a score out of 20"
                     sleep 2
                     newrecord
        elif [[ "$prof1" = "$output4" ]]; then
                echo -e "$prof1 has been accepted\n"
                     sleep 2
        else
                echo "The input must be a numerical number"
                     sleep 2
                     newrecord
        fi

There is something wrong i guess, how could you validate a value to be greater than 20 and less than -1 ?

if [[ $prof1 -gt 20 && $prof1 -le -1 ]];

You are supplying an argument to grep which will cause it to print 20 lines before and after each match

To indicate that no further options are to be read, use the "--" end of options indicator

clear
        read -p "please enter professionalism score:" prof1
                echo -e "\n"
output=$(grep -w -- "$prof1" appraisalrecord)
output4=$(echo -- $prof1 | tr -dc '[:digit:]')
        if [[ $prof1 -gt 20 || $prof1 -le -1 ]]; then
                echo "please enter a score out of 20"
                     sleep 2
                     newrecord
        elif [[ "$prof1" = "$output4" ]]; then
                echo -e "$prof1 has been accepted\n"
                     sleep 2
        else
                echo "The input must be a numerical number"
                     sleep 2
                     newrecord
        fi