case语句相当于其他语言的switch
,如果if对同一个变量要判断很多种情况,可以用case语句来写。
通用语法如下:
case "$VAR" in
pattern_1)
# Commands go here.
;;
pattern_N)
# Commands go here.
;;
esac
;;
表示终止case语句执行。类似于其他编程语言的break
关键字。例如对于ssh start
和ssh stop
:
case "$1" in
start) # 如果是start则启动ssh
/usr/sbin/sshd
;;
stop) # 如果是stop则关掉ssh进程
kill $(cat /var/run/sshd.pid)
;;
esac
对于其他语言,switch有default
分支,bash也不例外,可以使用*
进行匹配:
case "$1" in
start) # 如果是start则启动ssh
/usr/sbin/sshd
;;
stop) # 如果是stop则关掉ssh进程
kill $(cat /var/run/sshd.pid)
;;
*)
echo "Usage: $0 start|stop"; exit 1
;;
esac
上面的例子只能匹配小写的输入,例如输入大写的START
,此时就不能匹配。
如果想匹配大小写,一种简单的实现方式:
case "$1" in
start|START) # 使用|来表示匹配多种情况
/usr/sbin/sshd
;;
stop|STOP)
kill $(cat /var/run/sshd.pid)
;;
*)
echo "Usage: $0 start|stop"; exit 1
;;
esac
我们在安装软件时,提示输入yes或no表示我们的选择。此时输入y
,yes
, YeS
都可以。这又是怎么实现的呢?
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
运行效果如下:
[@bogon:bashlearn (master)]$ ./1.sh
Enter y or n: yes
You answered yes.
[@bogon:bashlearn (master)]$ ./1.sh
Enter y or n: Yes
You answered yes.
[@bogon:bashlearn (master)]$ ./1.sh
Enter y or n: jjj
Invalid answer!
[@bogon:bashlearn (master)]$ ./1.sh
Enter y or n: No
You answered no.