What is a bash case statement?
A bash case statement is a way to control the flow of a bash script. It checks the value of a variable and compares it with different patterns. When it finds a match, it runs the commands for that option. If no match is found, it runs a default action.
This is much easier than writing many if-else statements. Think of it like a menu: you choose one option, and the script knows what to do.
How a bash case statement works
The structure is simple:
- Start with the word case followed by the variable you want to test
- Add the word in
- Write possible patterns and commands for each match
- End each pattern with two semicolons ( ;; )
- Use a star (*) for the default option
- Close with esac (which is case spelled backward)
Example 1: Color menu
echo "Pick a color:"
echo "1 Blue"
echo "2 Red"
echo "3 Yellow"
echo "4 Green"
read choice
case $choice in
1) echo "Blue is a primary color";;
2) echo "Red is a primary color";;
3) echo "Yellow is a primary color";;
4) echo "Green is a secondary color";;
*) echo "This color is not available";;
esac
Explanation line by line:
echo "Pick a color:"
→ prints a message asking the user to pick a color.echo "1 Blue"
,echo "2 Red"
, etc. → show the available options.read choice
→ waits for the user to type a number and stores it in the variablechoice
.case $choice in
→ starts the case statement and checks the value ofchoice
.1) echo "Blue is a primary color";;
→ if the value is1
, it prints this message.2)
,3)
,4)
→ handle other valid choices.*) echo "This color is not available";;
→ the star is the default option. It runs if the user enters something other than 1–4.esac
→ ends the case statement.
Example 2: Days in a month
read -p "Enter a month: " month
case $month in
February) echo "28 or 29 days";;
April|June|September|November) echo "30 days";;
January|March|May|July|August|October|December) echo "31 days";;
*) echo "Unknown month";;
esac
Explanation line by line:
read -p "Enter a month: " month
→ shows a prompt asking for a month and saves the input in the variablemonth
.case $month in
→ begins the case statement and checks the value ofmonth
.February) echo "28 or 29 days";;
→ if the user typed “February”, it prints this message.April|June|September|November)
→ the bar symbol|
means “or”, so this line matches any of those months and prints “30 days”.January|March|...|December)
→ matches the other months and prints “31 days”.*) echo "Unknown month";;
→ handles anything else that does not match.esac
→ closes the statement.
Example 3: File type check
for file in *; do
case $file in
*.txt) echo "Processing text file: $file";;
*.csv) echo "Processing CSV file: $file";;
*) echo "Ignoring unknown file: $file";;
esac
done
Explanation line by line:
for file in *; do
→ this loop goes through every file in the current folder. Each file name is stored in the variablefile
.case $file in
→ starts the case statement and checks the current file name.*.txt) echo "Processing text file: $file";;
→ if the file name ends with.txt
, it prints that it is processing a text file.*.csv) echo "Processing CSV file: $file";;
→ if the file name ends with.csv
, it prints that it is processing a CSV file.*) echo "Ignoring unknown file: $file";;
→ the default action for all other file types.esac
→ ends the case statement.done
→ ends the loop.
Why use a bash case statement?
- It makes scripts shorter and easier to read
- It avoids long and confusing if-else chains
- It stops after finding the first match
- It lets you group multiple patterns together
Quick template for bash case statement
Here’s the general structure:
case value in
option1) commands;;
option2) commands;;
*) default commands;;
esac
Explanation:
case value in
→ begins the case statement and checks the value.option1)
→ pattern to match.commands;;
→ runs if the pattern matches.*)
→ the default option for anything else.esac
→ ends the case statement.
Common uses of bash case statement
The bash case statement is often used to:
- Create menus for users
- Handle different user inputs
- Run commands depending on file names or file extensions
Final thoughts
The bash case statement is one of the most useful tools in bash scripting. It gives your script a clear list of choices instead of many if-else lines.
By understanding the structure and seeing how it works in examples, you can start writing scripts that are simple, clear, and beginner-friendly. Whenever you have multiple options to check, case is the right tool to use.