You could make use of until:
until ((ip_choice >=1 && ip_choice <= 256)); do
read -p "Enter a valid IP (1-256): " ip_choice;
done
Quoting from help until:
until: until COMMANDS; do COMMANDS; done
Execute commands as long as a test does not succeed.
Expand and execute COMMANDS as long as the final command in the
`until' COMMANDS has an exit status which is not zero.
Exit Status:
Returns the status of the last command executed.
For example:
$ until ((ip_choice >=1 && ip_choice <= 256)); do
> read -p "Enter a valid IP (1-256): " ip_choice;
> done
Enter a valid IP (1-256): 0
Enter a valid IP (1-256): 298
Enter a valid IP (1-256): 242