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

posted @ 2022-07-26 18:00  Gabydawei  阅读(157)  评论(0编辑  收藏  举报