(3.6)Case用法

1.case语法结构

  • 模式匹配case
  • 语法结构,相当于if。。。。。。elif。。。。else。。。。
    case语句是从上往下执行的
case 变量 in
模式1)
	命令序列
	;;
模式1)
	命令序列
	;;
模式1)
	命令序列
	;;	
*)
	无匹配后命令序列
esac
  • eg:
#!/usr/bin/bash
#yum config case
yum_server=10.8.40.100
os_vrsion=`cat /etc/redhat-release|awk '{print $4}' \
|awk -F"." '{print $1"."$2}'`

[-d /etc/yum.repos.d] || mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.d /etc/yum.repos.d/bak &>/dev/null

case "$os_version" in ##变量的值去匹配哪个,字符串匹配
7.3)## "7.3"也可以
	cat >/etc/yum.repos.d/centos7u3.repo<<-EOF
	[centos7u3]
	name=centos7u3
	baseurl=ftp://$yum_server/centos7u3
	gpgcheck=0
	EOF
	echo "7.3 yum configure.."
	;;
6.8)
	curl -o /etc/yum.repos.d/centos6u8.repo ftp://$yum_server/centos6u8.repo
	;;
5.9)
	curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirros.aliyun.com/repo/Cetos-5.repo
	;;
*)
	echo "error"
esac

执行:
sh -n yumconfig.sh
  • eg:删除用户的脚本
#!/usr/bin/bash
#delete user
#v1.0 by jiwang 2020-2-17
read -p "input a username: " user

id $user &>/dev/null
if [ $? -ne 0 ];then
	echo "no such user: $user"
	exit 1  ##这里的1随便定义
fi

read -p "Are you sure?[y/n]: " action
if [ "${action}" == "y" -o "${action}" == "Y" ];then
	userdel -r $user
	echo "$user is deleted"
else
	echo "good!"
	exit 2
fi
===================================================================================

#!/usr/bin/bash
#delete user
#v1.0 by jiwang 2020-2-17
read -p "input a username: " user

id $user &>/dev/null
if [ $? -ne 0 ];then
	echo "no such user: $user"
	exit 1  ##这里的1随便定义
fi

read -p "Are you sure?[y/n]: " action
case "$action" in
y|Y|yes)
	userdel -r $user
	echo "$user is deleted"
	;;
*)
	echo "error"
esac

  • command命令:可以判断后面的命令是不是命令
#!/usr/bin/bash

command1=/bin/date
if command -v $command &>/dev/null;then
	:
else
	yum -y install ..
fi

是命令的话,啥都不做,可以用:表示,:就是true

2.case实现jump Server

  • 要求:只对跳板机提供远程连接端口,shell脚本的大致框架如下:
    (1)打开个菜单
    (2)echo和read加个提示
    (3)判断变量的值
    在这里插入图片描述
  • eg代码如下:从跳板机到后面的机器采用密码验证登录
在三个服务器上,分别临时修改主机名:hostname web1      hostname web2     hostname mysql1
在三个服务器和跳板机上,分别增加用户名:
useradd alice 
passwd alice
su - alice
===================================================================================
在跳板机上操作:
vim jumpserver.sh

#!/usr/bin/bash
#jumpserver
web1=192.168.122.241
web2=192.168.122.52
mysql=192.168.122.210
clear
while :
do
	#打印
	cat <<-EOF
	1. web1
	2. web2
	3. mysql1
	EOF
	
	read -p "input number: " num
	case "$num" in
	1)
		ssh alice@$web1
		;;
	2)
		ssh alice@$web2
		;;
	3)
		ssh alice@$mysql1
		;;
	"")  ##啥也不干,'')也行
		echo "error"
	esac
done

  • eg:eg代码如下:从跳板机到后面的机器采用密钥验证登录
以alice为主机名进行操作:
ssh-keygen
全都输入空格,产生公钥和私钥
ll .ssh/
ssh-copy-id 192.168.122.52
ssh-copy-id 192.168.122.210
ssh-copy-id 192.168.122.241

执行上面脚本:
sh jumpserver.sh
  • 从远程10.18.42.101登录到跳板机,执行的结果如下:在这里插入图片描述
  • 在跳板机上,将该jumpserver.sh脚本的绝对路径放到.bash_profile中,使得脚本自启动
    在这里插入图片描述
  • trap捕捉信号,继续上面的eg去写
##trap捕捉信号,没有做什么操作,防止脚本退出,使得crl C没用
#!/usr/bin/bash
#jumpserver
trap "" HUP INT OUIT TSTP
web1=192.168.122.241
web2=192.168.122.52
mysql=192.168.122.210
。。。。。
。。。。。。
  • echo打印有颜色的字体时,是换行的,-n参数可以不换行,继续上面的eg去写
。。。
EOF

echo -en "\e[1;32minput number: \e[0m"
read num

case 。。。。
。。。

3.case实现简单的系统工具箱

  • 工具箱类似如下:
    在这里插入图片描述
  • eg:前面的大端提示打印的话,用cat或者echo或者printf去打印
vim system_manager.sh

#!/usr/bin/bash
#system manager
#v1.0 by jiwang 2020-2-18

##函数为了能重复的调用
menu()
{
	cat <<-EOF
	################################
	#	h. help
	#	f. disk partition
	#	d. filesysytem mount
	#	m. memory
	#	u. sysytem load
	#	q. exit
	################################
	EOF
}

menu
while :       			 ##死循环 while [ 1 == 1 ]   或者 while true
	do    
	read -p "Please input[h for help]: " action
	##接着做模式匹配
	case "$action" in
	h)
		clear
		menu
		;;
	f)
		fdisk -l
		;;
	d)
		df -Th
		;;
	m)
		free -m  ##按Mbit显示
		;;
	u)
		uptime
		;;
	q)
		exit			##exit跳出程序。。。。。。break跳出循环
		;;
	"")					##输入为空
		;;
	*)
		echo "error"
	esac
done
echo "finish...."###使用break会执行
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值