A case statement in bash scripts is used when a decision has to be made against multiple choices. In other words, it is useful when an expression has the possibility to have multiple values. This methodology can be seen as a replacement for multiple if-statements in a script. Case statements have an edge over if-statements because it improves the readability of our code and they are easier to maintain. Case statements in a Bash script are quite similar to Case statements in C language. But unlike C, the Bash Case statement stops continuing the search as soon as the match occurs. In simple words, they don’t require any break statement that is mandatory to be used in C to stop searching for a pattern further.
The basic syntax of a case statement is given below,
Syntax:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac
Here’s how the case statement works:
In this example a script allows the user to select a department and shows a description corresponding to the input with the help of an echo command. In this script, we have assigned the DEPARTMENT variable as “Computer Science”. Thus, the body of the first pattern case gets executed.
You can follow the instructions given below:
1. Open the terminal (Ctrl + Alt + T) and create the script:
department.sh
2. Add these statements to the script:
#!/bin/bash DEPARTMENT="Computer Science" echo -n "Your DEPARTMENT is " case $DEPARTMENT in "Computer Science") echo -n "Computer Science" ;; "Electrical and Electronics Engineering" | "Electrical Engineering") echo -n "Electrical and Electronics Engineering or Electrical Engineering" ;; "Information Technology" | "Electronics and Communication") echo -n "Information Technology or Electronics and Communication" ;; *) echo -n "Invalid" ;; esac
3. Each of the lines is described below:
4. Save the script and make it executable.
chmod +x department.sh
5. Run the script.
./department.sh
Output:
In each clause, we can use multiple pattern cases. If the expression matches with at least one pattern case then the body gets executed of the clause. In this script, we have assigned the DEPARTMENT variable as “Electronics and Communication”. The third pattern case has two values separated by the pipe ( | ) operator. Thus, the body of the third pattern case gets executed.
You can follow the instructions given below:
1. Open the terminal (Ctrl + Alt + T) and create the script:
department.sh
2. Add these statements to the script:
#!/bin/bash DEPARTMENT="Electronics and Communication" echo -n "Your DEPARTMENT is " case $DEPARTMENT in "Computer Science") echo -n "Computer Science" ;; "Electrical and Electronics Engineering" | "Electrical Engineering") echo -n "Electrical and Electronics Engineering or Electrical Engineering" ;; "Information Technology" | "Electronics and Communication") echo -n "Information Technology or Electronics and Communication" ;; *) echo -n "Invalid" ;; esac
3. Each of the lines has been discussed below:
4. Save the script and make it executable.
chmod +x department.sh
5. Run the script.
./department.sh
Output:
In this script, we have assigned the department of three students of a class in an array DEPARTMENT. In other words, we are going to process more than one expression that is described in the DEPARTMENT variable. To iterate over multiple expressions, we can use a for a loop.
You can follow the instructions given below:
1. Open the terminal (Ctrl + Alt + T) and create the script:
department.sh
2. Add these statements to the script:
#!/bin/bash DEPARTMENT=("Electronics and Communication" "Computer Science" "Information Technology") for value in "$" do case $value in "Computer Science") echo -n "Computer Science " ;; "Electrical and Electronics Engineering" | "Electrical Engineering") echo -n "Electrical and Electronics Engineering or Electrical Engineering " ;; "Information Technology" | "Electronics and Communication") echo -n "Information Technology or Electronics and Communication " ;; *) echo -n "Invalid " ;; esac done
3. Each of the lines is described below:
4. Save the script and make it executable.
chmod +x department.sh
5. Run the script.
./department.sh
Output:
You can follow the instructions given below:
1. Open the terminal (Ctrl + Alt + T) and create the script:
department.sh
2. Add these statements to the script:
#!/bin/bash echo -n "Are you a student? [yes or no]: " read response case $response in "Y" | "y" | "YES" | "Yes" | "yes") echo -n "Yes, I am a student." ;; "N" | "n" | "No" | "NO" | "no" | "nO") echo -n "No, I am not a student."; ;; *) echo -n "Invalid input" ;; esac
3. Each of the lines is explained below:
4. Save the script and make it executable.
chmod +x department.sh
5. Run the script using the command below.
./department.sh
Output:
You can follow the instructions given below:
1. Open the terminal (Ctrl + Alt + T) and create the script:
signals.sh
2. Add these statements to the script:
#!/bin/bash if [ $# -lt 2 ] then echo "Usage : $0 Signalnumber PID" exit fi # Case statement # Signal number (expression) case "$1" in 1) echo "Sending SIGHUP signal. " kill -SIGHUP $2 ;; 2) echo "Sending SIGINT signal. " kill -SIGINT $2 ;; 3) echo "Sending SIGQUIT signal. " kill -SIGQUIT $2 ;; 4) echo "Sending SIGKILL signals. " kill -SIGKILL $2 ;; *) echo "Signal number $1 has not been processed" ;; esac
3. Each of the lines is explained below:
4. Save the script.
5. Run the script using the command below.
./signals.sh
Output:
$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed