How to check if a number is within a range in shell

48,181

Solution 1

If you are using Bash, you are better off using the arithmetic expression, ((...)) for readability and flexibility:

if ((number >= 2 && number <= 5)); then
  # your code
fi

To read in a loop until a valid number is entered:

#!/bin/bash

while :; do
  read -p "Enter a number between 2 and 5: " number
  [[ $number =~ ^[0-9]+$ ]] || { echo "Enter a valid number"; continue; }
  if ((number >= 2 && number <= 5)); then
    echo "valid number"
    break
  else
    echo "number out of range, try again"
  fi
done

((number >= 2 && number <= 5)) can also be written as ((2 <= number <= 5)).


See also:

Solution 2

Your if statement:

if [ $number -ge 2 && $number -ls 5 ]; then 

should be:

if [ "$number" -ge 2 ] && [ "$number" -le 5 ]; then

Changes made:

  • Quoting variables is considered good practice.
  • ls is not a valid comparison operator, use le.
  • Separate single-bracket conditional expressions with &&.

Also you need a shebang in the first line of your script: #!/usr/bin/env bash

Solution 3

if [ $number -ge 2 && $number -ls 5 ]; then

should be

if [[ $number -ge 2 && $number -le 5 ]]; then

see help [[ for details

Solution 4

Try bellow code

echo "Enter number" 

read input

  if [[ $input ]] && [ $input -eq $input 2>/dev/null ]

  then

        if ((input >= 1 && input <= 4)); then

    echo "Access Granted..."

    break

  else

    echo "Wrong code"

  fi

  else

     echo "$input is not an integer or not defined"

  fi
Share:
48,181
jack
Author by

jack

Updated on July 09, 2022

Comments

  • jack
    jack almost 2 years

    I want to just insert number between two values, and otherwise the script repeated until correct number.

    This is my script and it does not work correctly:

    validation(){
    read number
    if [ $number -ge 2 && $number -ls 5 ]; then
        echo "valid number"
        break
    else
        echo "not valid number, try again"
    fi
    
    }
    
    echo "insert number"
    validation
    echo "your number is" $number