Connect with us

Website Tutorials

Practical Examples Of How A Bash Case Statement Can Be Used In Shell Scripts

Published

on

Practical Examples Of How A Bash Case Statement Can Be Used In Shell Scripts

Before we delve into the Bash case statement, let’s take a moment to understand the basics of Bash scripting. Bash, short for “Bourne Again Shell,” is a command-line interpreter and scripting language commonly used in Unix-like operating systems. It is the default shell for many Linux distributions and macOS. Bash scripting allows you to automate repetitive tasks, perform system administration tasks, and create robust and efficient scripts.

Whether you’re a system administrator, a developer, or simply someone looking to automate routine tasks, learning Bash scripting can greatly enhance your productivity. It enables you to create scripts that can be easily shared, executed, and customized, making it an essential skill for anyone working in a Unix-like environment.

Introduction

The Bash case statement in Bash scripting allows you to efficiently handle multiple conditions and execute different actions based on the matched patterns. It provides a flexible and concise way to implement complex decision-making logic in your scripts. By using the case statement, you can avoid writing lengthy if-else statements and achieve cleaner and more readable code.

The case statement works by comparing a given value against a set of patterns. When a match is found, the corresponding action or command associated with that pattern is executed. This makes it particularly useful when you have a range of possible values or conditions to handle.

Whether you’re automating system administration tasks, processing input data, or creating interactive scripts, understanding how to effectively use the Bash case statement is an invaluable skill. In this blog post, we will explore the syntax, structure, and various features of the case statement in Bash scripts.

Advertisement

Syntax And Structure

The Bash case statement follows a specific syntax and structure that allows you to handle multiple conditions and execute corresponding actions. The basic syntax of a case statement is as follows:

case expression in
    pattern1)
        # Action or command to execute when pattern1 matches the expression
        ;;
    pattern2)
        # Action or command to execute when pattern2 matches the expression
        ;;
    *)
        # Default action or command to execute when no patterns match
        ;;
esac

Let’s break down the different components of the case statement:

  • case – keyword begins the case statement.
  • expression – represents the value or variable against which the patterns will be matched.
  • in – separates the expression from the patterns.
  • pattern – specifies a pattern to match against the expression. It can include wildcards, regular expressions, or specific values.
  •  ) – Mark the end of each pattern and its corresponding action or command.
  • ;; – The double semicolon is used to separate the patterns and prevent fall-through execution.
  • *) – represents the default case or catch-all pattern. If none of the previous patterns match the expression, the action or command associated with the ) pattern will be executed.
  • esac – ends the case statement.

It’s important to note that the patterns are evaluated in the order they appear. Once a pattern matches the expression, the corresponding action or command is executed, and the case statement terminates.

Menu-Driven Scripts With Numbers

A practical use of case statements is creating menu-driven scripts. This allows users to select options from a menu and execute specific actions based on their choices. Here’s an example:

read choice
case $choice in
    1)
        echo "Starting the application..."
        # Execute start command
        ;;
    2)
        echo "Stopping the application..."
        # Execute stop command
        ;;
    *)
        echo "Invalid option!"
        ;;
esac

In this example, the user is prompted to select an option from the menu. The case statement matches the user’s choice against different patterns, and the corresponding action is executed. If an invalid option is selected, the default pattern triggers the action “Invalid option!”.

Menu-Driven Scripts With Flags

Case statements can be used to create menu-driven scripts using flags as options instead of numbers. This approach provides a more intuitive and user-friendly interface. Here’s an example:

Advertisement
while getopts "a:b:" opt; do
    case $opt in
        a)
            echo "Option a selected with value: $OPTARG"
            # Execute action for option a
            ;;
        b)
            echo "Option b selected with value: $OPTARG"
            # Execute action for option b
            ;;
        \?)
            echo "Invalid option: -$OPTARG"
            ;;
    esac
done

In this example, the script uses the getopts function to parse command-line options. Each option is matched against different patterns in the case statement. The corresponding actions are executed based on the matched pattern.

To run the script and provide options with values, you would use command-line arguments like this: ./script.sh -a valueA -b valueB

File Type Recognition

One common use case for case statements is recognizing different file types and performing specific actions accordingly. For example, let’s say you have a script that processes files in a directory. You can use a case statement to identify the file type based on its extension and execute the appropriate command. Here’s an example:

for file in *
do
    case $file in
        *.txt)
            echo "Processing text file: $file"
            # Execute text file processing command
            ;;
        *.csv)
            echo "Processing CSV file: $file"
            # Execute CSV file processing command
            ;;
        *)
            echo "Ignoring unknown file: $file"
            ;;
    esac
done

In this example, the case statement matches each file in the current directory against different patterns based on their file extensions. Depending on the matched pattern, the corresponding action is executed.

Multiple Patterns

You can specify multiple patterns separated by the pipe operator. This allows you to match against multiple conditions using a single action or command.

Advertisement

Multiple patterns enable you to handle different conditions with a shared action. Instead of repeating the same action for each pattern, you can group them. Here’s an example:

read fruit
case $fruit in
    "banana" | "papaya" | "mango")
        echo "It's a tropical fruit!"
        ;;
    *)
    echo "It's not a tropical fruit"
    ;;
esac

If $fruit is “banana,” “papaya,” or “mango,” the second pattern matches, and the action “It’s a tropical fruit!” is executed.

Check Character Type

In Bash case, you can check the type of a character by using character classes or ranges. This allows you to perform specific actions based on the type of the character. Let’s explore an example that combines checking character types using character classes:

read character
case $character in
    [[:alpha:]])
        if [[ $character == [[:upper:]] ]]; then
            echo "It's an uppercase alphabetic character!"
        elif [[ $character == [[:lower:]] ]]; then
            echo "It's a lowercase alphabetic character!"
        fi
        ;;
    [[:digit:]])
        echo "It's a numeric character!"
        ;;
    [[:punct:]])
        echo "It's a special character!"
        ;;
    *)
        echo "It's not a recognized character type."
        ;;
esac

If the character is alphabetic, in the nested statements it further checks if it is an uppercase or lowercase character using the [[:upper:]] and [[:lower:]] character classes respectively. If it is a numeric character, the pattern [[:digit:]] matches. If it is a special character, the pattern [[:punct:]] matches.

Regular Expressions

Regular expressions provide a powerful way to match and manipulate text patterns. In Bash, you can use regular expressions within a case statement to perform pattern matching. Let’s explore an example that demonstrates the usage of regular expressions:

Advertisement
read string
case $string in
    *[0-9]*)
        echo "The string contains a number."
        ;;
    *)
        echo "The string does not match any specified pattern."
        ;;
esac

In this example, the case statement checks the $string variable against two regular expression patterns. The [0-9] pattern matches if the string contains any numeric digit. If it matches, the action “The string contains a number.” is executed.

Conclusion

In this guide, we explored various practical examples of how to use Bash case statements. We covered different scenarios, including menu-driven scripts, file type recognition, checking character types, and regular expressions.

Bash case statements provide a flexible and efficient way to handle multiple conditions and perform specific actions based on different patterns. They allow you to create dynamic scripts that respond to user input or match specific patterns in text.

Remember to consider edge cases and handle unexpected input within your case statements to ensure robustness and reliability in your scripts.

Happy scripting!

Advertisement

Stephen Oduntan is the founder and CEO of SirsteveHQ, one of the fastest growing independent web hosts in Nigeria. Stephen has been working online since 2010 and has over a decade experience in Internet Entrepreneurship.

Continue Reading
Advertisement
Comments

Trending

Copyright © 2024 SirsteveHQ. All Rights Reserved.