What happens since < "$R2" is intrepreted as read from "$R2". Since you don't have a file with such a name, it complains.
[ (test command) command doesn't have < operator. You have to use -lt instead:
while [ "$R1" -lt "$R2" ]
There's a POSIX extenstion which supports it with a slash:
while [ "$R1" \< "$R2" ]
If you are using bash you bash then you can also use built-in [[ ..]] which has support for <, > etc.
while [[ "$R1" < "$R2" ]]
See also:
What is the difference between test, [ and [[ ?
After re-writing your code to put the loop inside if:
#!/bin/bash
echo -n "Enter a number1 "
read R1
echo -n "Enter a number2 "
read R2
if [[ "$R1" < "$R2" ]]
then
for((i=R1;i<R2;i++));
do
if [[ $((i % 2)) -eq 0 ]]; then
echo "Number is $i"
fi
done
else
echo "Nothing"
fi
]argument, which would need to be inserted in addition to the fix given in the answers.