Shell(7)case语句

Shell(7)case语句

前言

在一个脚本中,我们经常需要做到进行交互,根据交互输入的结果来执行不同的命令,这里就需要用到case语句。

与if语句不同的是,case语句更像是一个菜单,不需要你自己进行判断,根据提前预设好的不同结果,执行与之相对应的命令。

一、read命令

read命令是我们在脚本中用来交互的主要指令,他可以根据交互输入的方式来定义变量。read 是 Shell 内置命令,如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。read命令的基本格式为:

read [选项] [变量名]    #变量名可以是多个

选项:

选项 内容
-p 显示提示信息,且不使用换行符,提示内容为 prompt。
-n 最多读取n个字符后就停止,如果中途遇到回车或换行则立即停止。
-N 最多读取n个字符后就停止,如果遇到回车或换行也不会停止。
-r 原样读取(Raw mode),不把反斜杠字符解释为转义字符。
-s 静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。
-e 在获取用户输入的时候,对功能键进行编码转换,不会直接显示功能键对应的字符。
-d 用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。
-a 把读取的数据赋值给数组 array,从下标 0 开始。
-u 使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。
-t 设置超时时间,如果超过了这个时间还没有结束输入,read 不会存储任何数据。

例:交互式地输入你的姓名,并输出这个变量:

二、case语句

case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写。

case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个变量的不同取值。

case语法结构:

case $变量 in   #case 行尾必须为单词“in”
模式1)         #每一模式必须以右括号“)”结束。
	命令序列1 
	;;         #双分号“;;”表示命令序列的结束。
模式2)        #模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”超过9的数字需要用正则表达式;还可以用竖杠符号 “|”表示或,如“A|B”。
	命令序列2
	;;
* )            #最后的“*)”表示默认模式,其中的*相当于通配符。
	命令序列3   #最后一个模式后不需要加双分号。
esac           #把case倒过来写,表示结束case语句

例:输入一个字符,判断字符的类型:

END

猜你喜欢

转载自blog.csdn.net/tu464932199/article/details/125589586