Search code examples
bashswitch-statement

How to use a range of numbers as a case statement in Bash?


I am trying to do the following using case in Bash (in Linux).

If X is between 460 and 660, output X information.

If X is between 661 and 800, do something else.

Etc.

Right now this is what I have:

case $MovieRes in
    [461-660]*) echo "$MovieName,480p" >> moviefinal ;;
    [661-890]*) echo "$MovieName,720p" >> moviefinal ;;
    [891-1200]*) echo "$MovieName,1080p" >> moviefinal ;;
    *) echo "$MovieName,DVD" >> moviefinal ;;
esac

But somehow many of the ones that are 480p, 720p or 1080p are ending with DVD instead. The variable $MovieRes is a simple list that shows, for each line, a number between 1 and 1200. Depending on the value, case decides which "case" to apply.

I would like to know how to actually use case to accomplish this since it is a bit confusing when dealing with ranges like this.


Solution

  • In bash, you can use the arithmetic expression: ((...))

    if ((461<=X && X<=660))
    then
        echo "480p"
    elif ((661<=X && X<=890))
    then
        echo "720p"
    elif ((891<=X && X<=1200))
    then
        echo "1080p"
    else
        echo "DVD"
    fi >> moviefinal