case:根据变量不同取值,执行不同的命令,多用于列表

Case的特点:

1)case行尾必须为单词”in”,每一模式必须以右括号”)”结束。

2)双分号”;;”表示命令序列的结束。

3)模式字串中,可以用方括号表示一个连续的范围,如”[0-9]”;还可以用竖杠符号”|”表示或,如”A|B”

4)最后的”*)”表示默认模式,其中的*相当于通配符。

格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
#变量值$1固定位置变量,主要用于服务脚本

case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认命令序列
esac

例:编写系统服务脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

#$1固定位置变量,主要用于服务脚本。

case $1 in
start)
/usr/local/httpd/apachectl start &> /dev/null
echo "httpd is running"
;;
stop)
/usr/local/httpd/apachectl stop &> /dev/null
echo "httpd is stop"
;;
restart)
/usr/local/httpd/apachectl restart &> /dev/null
echo "httpd is restart"
;;
*)
echo "httpd is start/stop/restart/reload/status"
;;
esac

例:检查用户输入的字符类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

read -p "请输入一个字符,并按Enter键确认:" key
case "$key" in
[0-9])
echo "数字"
;;
[a-z]|[A-Z])
echo "字母"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
;;
esac

例:选择性别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

read -p "请输入你的性别:" src
case $src in
"n")
echo "你选择的是男性"
;;
"v")
echo "你选择的是女性"
;;
*)
echo "请输入n(男性),v(女性),来选择性别"
;;
esac