shell case语句

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:白色

作业

跳板机

  1. 判断指定ip是否可以连接
  2. 判断退出密码
  3. 推送密钥
#!/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
posted @   FYytfg  阅读(165)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示