No interesse da legibilidade, eu faria algo como:
checkrange() {
if [[ "$1" -le 3 ]] && [[ "$1" -ge 1 ]]; then
return 0
else
return 1
fi
}
L=0
C=0
prompt="Please enter values for L and C >"
while ! ( checkrange "$L" && checkrange "$C" ); do
read -p "$prompt" L C
prompt="Invalid input; please enter new values for L and C >"
done