Bash Case Statements - Pattern Matching Switch
Learn bash case statements for pattern matching control flow. Covers basic patterns, wildcards, OR patterns, and practical examples for argument parsing and menus.
Detailed Explanation
Case Statements in Bash
The case statement provides pattern-matching similar to a switch statement. It is cleaner than multiple if/elif chains when matching a variable against several patterns.
Basic Syntax
case "$variable" in
pattern1)
commands
;;
pattern2)
commands
;;
*)
default commands
;;
esac
Service Control Script
#!/usr/bin/env bash
case "$1" in
start)
echo "Starting service..."
./bin/server --daemon
;;
stop)
echo "Stopping service..."
kill $(cat /var/run/app.pid)
;;
restart)
$0 stop
sleep 2
$0 start
;;
status)
if [ -f /var/run/app.pid ] && kill -0 $(cat /var/run/app.pid) 2>/dev/null; then
echo "Running (PID: $(cat /var/run/app.pid))"
else
echo "Stopped"
fi
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
Pattern Matching Features
# OR patterns
case "$input" in
yes|y|Y)
echo "Confirmed"
;;
no|n|N)
echo "Cancelled"
;;
esac
# Wildcards
case "$filename" in
*.tar.gz|*.tgz)
tar -xzf "$filename"
;;
*.zip)
unzip "$filename"
;;
*.deb)
dpkg -i "$filename"
;;
*)
echo "Unknown file type"
;;
esac
# Character ranges
case "$char" in
[a-z]) echo "Lowercase letter" ;;
[A-Z]) echo "Uppercase letter" ;;
[0-9]) echo "Digit" ;;
*) echo "Special character" ;;
esac
Argument Parsing
while [[ $# -gt 0 ]]; do
case "$1" in
-h|--help)
usage
exit 0
;;
-v|--verbose)
VERBOSE=true
shift
;;
-o|--output)
OUTPUT="$2"
shift 2
;;
--)
shift
break
;;
-*)
echo "Unknown option: $1" >&2
exit 1
;;
*)
ARGS+=("$1")
shift
;;
esac
done
Use Case
Case statements are ideal for service init scripts (start/stop/restart), command-line argument parsing, file type detection based on extension, interactive menu systems, and any scenario where you need to match a value against multiple patterns. They are more readable and maintainable than long if/elif chains.
Try It — Bash Cheat Sheet
Related Topics
Bash If/Else Conditions - Tests, Comparisons, and File Checks
Control Flow
Bash Functions - Definition, Arguments, Return Values, Scope
Control Flow
Bash Script Basics - Shebang, Arguments, Exit Codes, set Options
Script Basics
Bash For Loops - Iterating Over Lists, Ranges, and Files
Control Flow
Bash Error Handling - set -e, trap, Exit Codes, Retry Patterns
Error Handling