shell中模式匹配+函数+正则

一、case语句

case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相
匹配的命令。

case var in             定义变量;var代表是变量名
pattern 1)              模式1; 用 | 分割多个模式,相当于or
    command1            需要执行的语句
    ;;                  两个分号代表命令结束
pattern 2)
    command2
    ;;
pattern 3)
    command3
    ;;
*)                      default,不满足以上模式,默认执行*)下面的语句
    command4
    ;;
esac					esac表示case语句结束
案例1

当给程序传入start、stop、reload三个不同参数时分别执行相应命令。

#!/bin/bash
case $1 in
	start|S)
	read -p "Input your service name:" name
	case $name in
		apache)
		service apache start
		echo "$name service is running...."
		;;
		mysql)
		service mysql25 start
		echo "$name service is running..."
		;;
	esac
	;;
	stop|P)
	echo "service is stoped...."
	;;
	reload|restart)
	echo "service is restart..."
	;;
	*)
	echo "the $0 usage:$0 start|stop|reload..."
	;;
esac


#!/bin/bash
#up service
case $1 in
	start)
	read -p "Input your start service[vsftpd]:" var1
	case $var1 in
		vsftpd)
		service vsftpd start
		;;
		apache)
		service apache start
		;;
		'')
		true
		;;
		*)
		echo "请输入你要启动的服务,谢谢"
		;;
	esac
	;;
	stop|S)
	service iptables stop
	;;
	reload|restart)
	service iptables restart
	;;
	*)
	echo "Input your action..."
	;;
esac


案例2

模拟一个多任务维护界面。当执行程序时先显示总菜单,然后进行选择后做相应维护监控操作。

	h	显示命令帮助
	f	显示磁盘分区
	d	显示磁盘挂载
	m	查看内存使用
	u	查看系统负载
	q	退出程序

分析:
1. 打印菜单	echo cat
2. 等待用户输入需要的操作编号 h f d...	case ... esac


#!/bin/bash
#打印菜单
cat <<-EOF
	h	显示命令帮助
	f	显示磁盘分区
	d	显示磁盘挂载
	m	查看内存使用
	u	查看系统负载
	q	退出程序
	EOF

#让用户输入需要的操作
while true
do
read -p "请输入需要操作的选项[f|d]:" var1
case $var1 in
	h)
	cat <<-EOF
        h       显示命令帮助
        f       显示磁盘分区
        d       显示磁盘挂载
        m       查看内存使用
        u       查看系统负载
        q       退出程序
	EOF
	;;
	f)
	fdisk -l
	;;
	d)
	df -h
	;;
	m)
	free -m
	;;
	u)
	uptime
	;;
	q)
	exit
	;;
esac
done



#!/bin/bash
#打印菜单
menu(){
   
cat <<-END
	h	显示命令帮助
	f	显示磁盘分区
	d	显示磁盘挂载
	m	查看内存使用
	u	查看系统负载
	q	退出程序
	END
}
menu
while true
do
read -p "请输入你的操作[h for help]:" var1
case $var1 in
	h)
	menu
	;;
	f)
	read -p "请输入你要查看的设备名字[/dev/sdb]:" var2
	case $var2 in
		/dev/sda)
		fdisk -l /dev/sda
		;;
		/dev/sdb)
		fdisk -l /dev/sdb
		;;
	esac
	;;
	d)
	lsblk
	;;
	m)
	free -m
	;;
	u)
	uptime
	;;
	q)
	exit
	;;
esac
done

####练习

  1. 输入一个等级(A-E),查看每个等级的成绩;如:输入A,则显示“90分~100分”,依次类推
  2. 模拟2人第一次相亲的场景,使用read让用户输入它的名字,性别,年龄(年龄放在性别判断后);在case里面再嵌套case菜单,使之选项更丰富。

要求:
1)

  • 对性别进行判断,如果不输入男或者女,则显示”你是泰国来的吗?“
  • 如果是男的,对其年龄进行判断。

2)

  • 如果男的年龄大于等于18岁则显示“某某先生,你结婚了吗?”;
  • 如果对方回答结了或者yes,则显示“结了你来这凑什么热闹”;
  • 如果对方回答没有或者no,再次询问“那你有房有车吗?”;
  • 如果既不说结了也不说没结则显示:“你到底结没结婚啊?”
  • 如果回答有房有车,则显示”咱去民政局领证吧“;
  • 如果回答没有,则显示“不好意思,我去下洗手间。”;
  • 如果既不说有又不说没有,则显示“别浪费时间,请正面回答”。
  • 如果男的年龄小于18岁,则显示“某某某你个小毛孩也来这凑热闹啦”
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值