CASE statements are similir to ELIF statements, use
elif statements are more than 3.
case expression in pattern1 ) statements ;; pattern2 ) statements ;; esac
Exactly how you use
fi to end
if statements, you close a
case statement with
esac (which is the alphabetic opposite of case, case spelled backwards).
;; marks the end of a statement.
echo -n "give me a domain: " read domain case $domain in "google.com" ) echo "Google, wow!" ;; "twitter.com" ) echo "Twitter -_-" ;; "udemy.com" ) echo "Udemy, YES!" ;; "aamnah.com" ) echo "Aamnah.com, brilliant. Let's PING!" ping -c3 aamnah.com ;; esac
case "$1" in start) /usr/sbin/sshd ;; stop) kill $(cat /var/run/sshd.pid) ;; esac
In the example above if $1 is equal to
/usr/sbin/sshd is executed. If $1 is equal to
stop then the
kill command is executed. If $1 matches neither start nor stop then nothing happens and the script continues after the statement.
Note: case statements (start and stop in the example above) are case-sensitive.
case "$1" in start) /usr/sbin/sshd ;; stop) kill $(cat /var/run/sshd.pid) ;; *) echo "Usage start|stop" exit 1 ;; esac
In this example, anything other than start or stop will show usage instructions.
*) echo "Usage start|stop" exit 1 ;;
is the same as
*) echo "Usage start|stop" ; exit 1 ;;
check multiple conditions
You can use pipe
| to seperate multiple case statement conditions/options.
| servers as
case "$1" in start|START) /usr/sbin/sshd ;; stop|STOP) kill $(cat /var/run/sshd.pid) ;; *) echo "Usage start|stop" exit 1 ;; esac
Character classes are simply a list of characters between brackets
. Like so:
A character class matches exactly one character, and a match occurs for any of the including characters in the brackets.
will check for all case-sensitive possibilities of yes. yes, Yes, yEs, yeS, YEs, yES, YeS, and so on.. Here’s a code example:
read -p "Enter y or n: " ANSWER case "$ANSWER" in [yY]|[yY][eE][sS] ) echo "You answered yes." ;; [nN]|[nN][oO] ) echo "You answered no." ;; * ) echo "Invalid answer." ;; esac