shell case语句
case语句
sase...esac 为多选择语句,与其它语言中的swith...case语句类似,是一种多分支选择语句,每个case分支用右括号开始,用两个分号;;表示break,即执行结束,跳出整个case...esac语句,esac(就是case反过来)作为结束标记。
case 变量 in
动作1|动作2|动作3)
cmd1
;;
动作)
cmd2
;;
*)
cmd3
;;
esac
case会将所有变量和动作进行判断
可以进行多个动作判断,使用 '|' 或
给shell加颜色
\e[1;31mzh\e[0m
字体型号;字体颜色;背景颜色m
0: 正常字体
1:加粗
2:变浅
3:斜体
4:下划线
5: 字体闪烁
30m:黑色
31m:红色
32m:绿色
33m:黄色
34m:蓝色
35m:紫色
36m:天蓝
37m:白色
40m:黑色
41m:红色
42m:绿色
43m:黄色
44m:蓝色
45m: 紫色
46m:天蓝
47m:白色
作业
跳板机
- 判断指定ip是否可以连接
- 判断退出密码
- 推送密钥
#!/bin/bash
. /etc/init.d/functions
key (){
ls -l ~/.ssh/id_rsa &>/dev/null || ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa &>/dev/null
sshpass -p 1 ssh-copy-id -o 'StrictHostKeyChecking no' -i ~/.ssh/id_rsa.pub root@172.16.1.$1 &>/dev/null && \
action "172.16.1.$1 send public key " /bin/true return 1 || \
action "172.16.1.$1 send public key " /bin/false
}
ip (){
read -p "按 1 测试主机通不通 ----- 按 2 进入172.16.1.$1: " host
if [ $host -eq 2 ];then
ping -c1 -w1 172.16.1.$1 &>/dev/null
if [ $? -eq 0 ];then
key $1
if [ $? -eq 0 ];then
ssh 172.16.1.$1
else
echo -e "\e[5;31;47m 密钥推送失败 \e[0m"
fi
else
echo -e "\e[5;31;47m 主机不存活 \e[0m"
fi
elif [ $host -eq 1 ];then
ping -c1 -w1 172.16.1.$1 &>/dev/null
if [ $? -eq 0 ];then
port=`echo ''|telnet 172.16.1.$1 22 2>/dev/null |grep 'Connected'|wc -l`
if [ $port -eq 0 ];then
echo -e "\e[5;31;47m 端口不存活 \e[0m"
else
echo "172.16.1.$1 存活"
echo -e "\n 22 端口存活"
fi
else
echo -e "\e[5;31;47m 主机不存活 \e[0m"
fi
else
echo -e "\e[5;31;47m 请输入1或2 \e[0m"
fi
}
mean (){
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 |
+------------------------+
| 按f查看菜单 |
+------------------------+
| 按 p 输入密码退出 |
+------------------------+
EOF
}
mean
while true;do
trap " " HUP INT TSTP
read -p '请输入序号或ip或主机名: ' num
case $num in
1|172.16.1.7|web)
ip 7
;;
2|172.16.1.8|web)
ip 8
;;
3|172.16.1.31|web)
ip 31
;;
4|172.16.1.41|web)
ip 41
;;
5|172.16.1.51|web)
ip 51
;;
6|172.16.1.52|web)
ip 52
;;
7|172.16.1.53|web)
ip 53
;;
8|172.16.1.54|web)
ip 54
;;
9|172.16.1.61|web)
ip 61
;;
10|172.16.1.71|web)
ip 71
;;
f)
clear
mean
;;
p)
read -s -p '请输入密码:' pass
if [ $pass == 'qqqqq' ];then
echo -e "\n\e[5;32;47m 拜拜 \e[0m"
exit
else
echo -e "\e[5;31;47m密码错误\e[0m"
fi
;;
*)
echo -e "\e[5;35;47m 请输入序号或ip或主机名 \e[0m "
esac
done
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!