Sometimes we may wish to take different paths based upon a variable matching a series of patterns. We could use a series of if and elif statements but that would soon grow to be unwieldily. Fortunately there is a case statement which can make things cleaner. It's a little hard to explain so here are some examples to illustrate:
case <variable> in <pattern 1>) <commands> ;; <pattern 2>) <other commands> ;; esac
Example 1)
#!/bin/bash # case example case $1 in start) echo starting ;; stop) echo stoping ;; restart) echo restarting ;; *) echo don\'t know ;; esac
Example 2) Regular Expression
#!/bin/bash
# Print a message about disk useage.
space_free=$( df -h | awk '{ print $5 }' | sort -n | tail -n 1 | sed 's/%//' )
case $space_free in
	[1-5]*)
		echo Plenty of disk space available
		;;
	[6-7]*)
		echo There could be a problem in the near future
		;;
	8*)
		echo Maybe we should look at clearing out old files
		;;
	9*)
		echo We could have a serious problem on our hands soon
		;;
	*)
		echo Something is not quite right here
		;;
esac