shell编程-case流程控制
case语句介绍
case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
在某些时候,case要优于if,少写很多判断
case语句格式
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
开头是case 结尾是esac
case 值 in
动作1)
cmd1
cmd2
;;
动作2)
cmd1
cmd2
;;
esac
语句实例
#!/bin/bash
read -p 'input hostname:' host
case $host in
1|web01)
echo '连接 172.16.1.7 web01'
;;
2|web02)
echo '连接 172.16.1.8 web02'
;;
3|web03)
echo '连接 172.16.1.9 web03'
;;
esac
[root@web02 ~]# sh 3.sh
input hostname:1
连接 172.16.1.7 web01
[root@web02 ~]# sh 3.sh
input hostname:web02
连接 172.16.1.8 web02
[root@web02 ~]# sh 3.sh
input hostname:2
连接 172.16.1.8 web02
[root@web02 ~]# sh 3.sh
input hostname:3
连接 172.16.1.9 web03
[root@web02 ~]# sh 3.sh
input hostname:web03
连接 172.16.1.9 web03
跳板机实例
#!/bin/bash
cat <<EOF
+--------------------------+
| 1 172.16.1.7 web01 |
+--------------------------+
| 2 172.16.1.8 web02 |
+--------------------------+
| 3 172.16.1.9 web03 |
+--------------------------+
| 4 172.16.1.5 lb01 |
+--------------------------+
| 5 172.16.1.6 lb02 |
+--------------------------+
| 6 172.16.1.31 nfs01 |
+--------------------------+
| 7 172.16.1.41 backup |
+--------------------------+
| 8 172.16.1.61 m01 |
+--------------------------+
| 9 172.16.1.51 db01 |
+--------------------------+
| 10 172.16.1.52 db02 |
+--------------------------+
| 11 172.16.1.71 zabbix |
+--------------------------+
EOF
read -p '请输入你要连接的主机(IPor主机名or编号):' host
case $host in
1|web01|172.16.1.7)
ssh root@172.16.1.7
;;
2|web02|172.16.1.8)
ssh root@172.16.1.8
;;
3|web03|172.16.1.9)
ssh root@172.16.1.9
;;
4|lb01|172.16.1.5)
ssh root@172.16.1.5
;;
5|lb02|172.16.1.6)
ssh root@172.16.1.6
;;
6|nfs|172.16.1.31)
ssh root@172.16.1.31
;;
7|backup|172.16.1.41)
ssh root@172.16.1.41
;;
8|m01|172.16.1.61)
ssh root@172.16.1.61
;;
9|db01|172.16.1.51)
ssh root@172.16.1.51
;;
10|db02|172.16.1.52)
ssh root@172.16.1.52
;;
11|zabbix|172.16.1.71)
ssh root@172.16.1.71
;;
*)
echo "Usage: $0 请输入表内的IP或者主机名或者编号"
esac