shell中的case in语句

shell中的case in 语句

1.case in 的用法

格式:

case expression in
	pattern 1)
		statement1
		;;
	pattern 2)
		statement2
		;;
……
	*)
		statementn
esac	

其中:case in 和esac都是shell关键字,expression表示表达式,pattern表示匹配模式
expression既可以是一个变量、一个数字、一个字符串,也可以是一个数学计算表达式或者命令的执行结果
pattern可以是一个数字、一个字符串、一个简单的正则表达式

执行过程:
case会将expression的值与pattern1、pattern2等逐个进行匹配:
如果expression和某个模式匹配成功,就会执行这个模式后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号;;才停止,然后整个case语句就执行完毕,跳出case语句,执行esac后面的其他语句
如果expression没有匹配到任何一个模式,那么就执行*)后面的语句(*表示其他所有值),直到遇见双分号;;或者esac才结束。*)相当于多个if的分支语句中最后的else部分

*)的说明:
1.case in语句中的*)用来“托底”,万一expression没有匹配到任何一个模式,*)部分可以做一些“善后”工作,或者给用户一些提示
2.可以没有*)部分,如果expression没有匹配到任何一个模式,就不执行任何操作
3.除了最后一个分支外(可以是普通分支,也可以是*)分支),其他的分支都必须以;;结尾,;;代表一个分支的结束。最后一个分支可以写;;,也可以不写。因为无论如何,执行到esac都会结束整个case in语句

例:

#!/bin/bash
read num

case $num in
	1)
	  echo "Monday"
	;;
	2)
	  echo "Tuesday"
	;;
	3)
	  echo "Wednesday"
	;;
	4)
	  echo "Thursday"
	;;
	5)
	  echo "Friday"
	;;
	6)
	  echo "Saturday"
	;;
	7)
	  echo "Sunday"
	;;
	*)
	  echo "error"
esac

在这里插入图片描述

2.case in 和正则表达式

case in 的pattern部分支持简单的正则表达式:

格式说明
*表示任意字符串
[abc]表示a、b、c三个字符中的任意一个
[m-n]表示从m到n的任意一个字符
[0-9]表示0-9的任意一个数字
[0-9a-zA-Z]表示任意数字或字母
|表示多重选择,类似逻辑运算中的或运算
abc|xyz表示abc或者xyz

例:

#!/bin/bash

echo "Input a character: "
read -n 1 char
# 如果此处需要用echo输出的话就不能用read -n 1 因为没有用户输入数据完成后是没有换行符的
# -n 1 表示只读取一个字符,运行脚本后 只要用户输入一个字符 立即读取结束 不用等用户按下回车键
# 解决方法:在echo语句中手动添加换行符
case $char in
	[a-zA-Z])
	echo -e "\nletter"
	;;
	[0-9])
	echo -e "\ndigit"
	;;
	[.,?!@])
	echo -e "\npunctuation"
	;;
	*)
	echo -e "\nerror"
esac

未解决时的运行结果:
在这里插入图片描述
解决后:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值