Home » Linux » Shell » Bash Case

How to Use the Bash case Statement, With Examples

The case statement is used to choose which code to execute based on the value of a variable or expression. Here is how to use it in your Bash scripts.

What Does the case Statement Do?

The case statement is a convenient alternative to using multiple if/if else statements when you are deciding what action to take based on the value of a variable or expression.

For example, if you have a variable called weekday, you can executed different code based on which day of the week is named in the variable, allowing you to execute different code based on what day it is.

It’s just a simple, easy-to-read syntax for executing code conditionally, compared to using if statements.

Bash case Statement Syntax

The syntax for the case statement is as follows:

case EXPRESSION in

    CONDITION_1)
        # Code to execute for the given condition
        ;;

    CONDITION_2)
        # Code to execute for the given condition
        ;;

    CONDITION_N)
        # Code to execute for the given condition
        ;;

    *)
        # Code to execute for the wildcard/catch-all
    ;;
esac

Note that:

  • EXPRESSION is the variable or expression that will be compared to the CONDITIONs
  • The CONDITIONs are the values that the EXPRESSION should match to execute the code within that CONDITIONs code block
    • Each condition is followed by a )
    • If a condition is matched, the code for it is executed
    • Each block of code for each CONDITION should end with a ;; to separate it from the next condition’s code
    • If multiple conditions are matched only the FIRST match is executed
    • Wildcard (*) conditions can be used as a catch all
      • This is optional
  • The entire case statement is wrapped in case/esac keywords

Bash case Examples

Here are some example case Bash scripts:

case Statements with Numerical Values

Consider the following if/*else statement:

#!/bin/bash

echo -n "Enter number greater than 0: "
read number

if [ $number -lt 3 ]; then
    echo "$number is less than 3!"
elif [ $number -eq 3]; then
    echo "$number is equal to 3!"
else
    echo "$number is not less than 3!"
fi
echo "You entered $number"

This could be simplified into the following case statement:

#!/bin/bash

echo -n "Enter number greater than 0: "
read number

case $number in
    [0-2])
        echo "$number is less than 3!"
        ;;
    3)
        echo "$number is equal to 3!"
        ;;
    *) 
        echo "$number is not less than 3!"
        ;;
esac

Note the use of a number range in the first condition to match a range of values for number, and the wildcard to catch any un-matched conditions.

This is easier to read, and requires less syntax, than the equivalent if/else statements.

Matching Strings with case

case statements are often used to control the flow of a script based on a string value from user input:

#!/bin/bash

currentWeekday = date +%A

case $currentWeekday in
    "Monday")
        echo "Boo, it's Monday"
        ;;
    "Saturday" | "Sunday")
        echo "It's the weekend!"
        ;;
    *) 
        echo "It's one of those other work days"
        ;;
esac

Above, a case statement is used to execute different code based on the current weekday (retrieved using the date program). Monday is matched to one code block, while Saturay OR Sunday is matched using the OR operator (|). The final wildcard will execute it’s code block for any day that does not match one of the prior conditions.

SHARE:
Photo of author
Author
I'm Brad, and I'm nearing 20 years of experience with Linux. I've worked in just about every IT role there is before taking the leap into software development. Currently, I'm building desktop and web-based solutions with NodeJS and PHP hosted on Linux infrastructure. Visit my blog or find me on Twitter to see what I'm up to.

Leave a Comment