shell case语句
shell case 语句
case语句
case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
# 语法
case 变量 in
动作1|动作2|动作3)
cmd1
;;
动作2)
cmd2
*)
echo '脚本的用法'
;;
esac
case会将变量和动作进行判断
可以进行多动作判断,使用 '|'
给shell加颜色
# 固定格式
\e[5;31mcjk\e[0m
[root@m01 ~]# echo -e '\e[5;31mcjk\e[0m'
# 字体型号
0:正常字体
1:字体加粗
2:字体变浅
3.字体斜体
4.字体下划线
5.字体闪烁
# 字体颜色
30m:黑色
31m:红色
32m:绿色
33m:黄色
34m:蓝色
35m:紫色
36m:天蓝
37m:白色
## 背景颜色
40m:黑色
41m:红色
42m:绿色
43m:黄色
44m:蓝色
45m:紫色
46m:天蓝
47m:白色
作业
# [root@m01 ~]# cat a.sh
#!/bin/bash
# File Name: __a.sh__
# Version: __v1.1__
# Author: __Driverwang__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-25 15:23__
. /etc/init.d/functions
key () {
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null
for n in 4 5 6 7 8 31 41 51 9 71;do
sshpass -p 1 ssh-copy-id -o 'StrictHostKeyChecking no' -i ~/.ssh/id_rsa.pub root@172.16.1.$n &>/dev/null && \
action "172.16.1.$n send public key " /bin/true || \
action "172.16.1.$n send public key " /bin/false
done
}
ip () {
for n in `seq 254`;do
ping -c1 -W1 -i1 172.16.1.$n &>/dev/null
if [ $? -eq 0 ];then
action 172.16.1.$n /bin/true
port=`echo ' '|telnet 172.16.1.${n} ${port} 2>/dev/null |grep 'Connected'|wc -l`
if [ $port -ne 0 ];then
key
fi
fi
done
}
ip
while true;do
cat <<EOF
+------------------------+
| 1 172.16.1.7 web01 |
+------------------------+
| 2 172.16.1.8 web02 |
+------------------------+
| 3 172.16.1.31 nfs |
+------------------------+
| 4 172.16.1.41 backup |
+------------------------+
| 5 172.16.1.51 db01 |
+------------------------+
| 6 172.16.1.52 db02 |
+------------------------+
| 7 172.16.1.53 db03 |
+------------------------+
| 8 172.16.1.54 db04 |
+------------------------+
| 9 172.16.1.61 m01 |
+------------------------+
| 10 172.16.1.71 zabbix |
+------------------------+
| 输入 BB 退出 |
+------------------------+
EOF
trap "" HUP INT TSTP
read -p '请输入需要链接的主机: ' host
case $host in
1|172.16.1.7|web01)
echo "$host 正在连接"
ssh 172.16.1.7
;;
2|172.16.1.8|web02)
echo "$host 正在连接"
ssh 172.16.1.8
;;
3|172.16.1.31|nfs)
echo "$host 正在连接"
ssh 172.16.1.31
;;
4|172.16.1.41|backup)
echo "$host 正在连接"
ssh 172.16.1.41
;;
5|172.16.1.51|dbo1)
echo "$host 正在连接"
ssh 172.16.1.51
;;
6|172.16.1.52|db02)
echo "$host 正在连接"
ssh 172.16.1.52
;;
7|172.16.1.53|db03)
echo "$host 正在连接"
ssh 172.16.1.53
;;
8|172.16.1.54|db04)
echo "$host 正在连接"
ssh 172.16.1.54
;;
9|172.16.1.61|m01)
echo "$host 正在连接"
ssh 172.16.1.61
;;
10|172.16.1.71|zabbix)
echo "$host 正在连接"
ssh 172.16.1.71
;;
BB)
read -s -p '懂得都懂: ' pass
if [ $pass -eq 123 ];then
echo -e "\n还是你懂我"
break
else
echo -e "\n你不懂我 gun"
fi
;;
*)
echo "输nm呢"
;;
esac
done
[root@m01 ~]# cat a.sh
#!/bin/bash
# File Name: __a.sh__
# Version: __v1.1__
# Author: __Driverwang__
# Mail: __2794552827@qq.com__
# Blog: __https://blog.driverzeng.com__
# DateTime: __2022-07-25 15:23__
. /etc/init.d/functions
key () {
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null
for n in 4 5 6 7 8 31 41 51 9 71;do
sshpass -p 1 ssh-copy-id -o 'StrictHostKeyChecking no' -i ~/.ssh/id_rsa.pub root@172.16.1.$n &>/dev/null && \
action "172.16.1.$n send public key " /bin/true || \
action "172.16.1.$n send public key " /bin/false
done
}
ip () {
for n in `seq 254`;do
ping -c1 -W1 -i1 172.16.1.$n &>/dev/null
if [ $? -eq 0 ];then
action 172.16.1.$n /bin/true
port=`echo ' '|telnet 172.16.1.${n} ${port} 2>/dev/null |grep 'Connected'|wc -l`
if [ $port -ne 0 ];then
key
fi
fi
done
}
ip
while true;do
cat <<EOF
+------------------------+
| 1 172.16.1.7 web01 |
+------------------------+
| 2 172.16.1.8 web02 |
+------------------------+
| 3 172.16.1.31 nfs |
+------------------------+
| 4 172.16.1.41 backup |
+------------------------+
| 5 172.16.1.51 db01 |
+------------------------+
| 6 172.16.1.52 db02 |
+------------------------+
| 7 172.16.1.53 db03 |
+------------------------+
| 8 172.16.1.54 db04 |
+------------------------+
| 9 172.16.1.61 m01 |
+------------------------+
| 10 172.16.1.71 zabbix |
+------------------------+
| 输入 BB 退出 |
+------------------------+
EOF
trap "" HUP INT TSTP
read -p '请输入需要链接的主机: ' host
case $host in
1|172.16.1.7|web01)
echo "$host 正在连接"
ssh 172.16.1.7
;;
2|172.16.1.8|web02)
echo "$host 正在连接"
ssh 172.16.1.8
;;
3|172.16.1.31|nfs)
echo "$host 正在连接"
ssh 172.16.1.31
;;
4|172.16.1.41|backup)
echo "$host 正在连接"
ssh 172.16.1.41
;;
5|172.16.1.51|dbo1)
echo "$host 正在连接"
ssh 172.16.1.51
;;
6|172.16.1.52|db02)
echo "$host 正在连接"
ssh 172.16.1.52
;;
7|172.16.1.53|db03)
echo "$host 正在连接"
ssh 172.16.1.53
;;
8|172.16.1.54|db04)
echo "$host 正在连接"
ssh 172.16.1.54
;;
9|172.16.1.61|m01)
echo "$host 正在连接"
ssh 172.16.1.61
;;
10|172.16.1.71|zabbix)
echo "$host 正在连接"
ssh 172.16.1.71
;;
BB)
read -s -p '懂得都懂: ' pass
if [ $pass -eq 123 ];then
echo -e "\n还是你懂我"
break
else
echo -e "\n你不懂我 gun"
fi
;;
*)
echo "输nm呢"
;;
esac
done