看似简单的read命令-->shell中最重要的输入命令!

read命令是干什么的?

read命令,是shell不可或缺 的一个输入命令 ,它的用途相当于c++中的cin输入流的用途,同时他也是shell中的内核命令通过read命令及其附带的一系列选项,我们可以很轻松的读取用户在键盘上的输入

read命令的写法

如果你想用read命令读取用于在键盘上的输入,那么read命令就应该这样写:

bash 复制代码
read [选项] [变量]

如果你执行没有任何选项的read命令,但是有变量,那么,命令不会结束,因为光标一直停在空行上,要你输出一些东西之后按回车才能结束。如果你按了回车,那么变量就读取了你在键盘上输入的东西,此时echo一下这个变量,就跟你刚才输入的东西一模一样了。

而如果你的read命令既没有选项,也没有变量,那么,在读取你的键盘的输入之后,REPLY变量就会读取你在键盘上的输入,此时你再echo一下REPLY变量,就也会输出你刚才在键盘上输入的东西。

read命令的选项

现在,就要来点有选项的read命令了,read命令的选项,主要就是以下几种。

选项 用途
-d 结束输入的字符串 设置用户结束输入的标识符,标识符为结束输入的字符串的第1个字符
-n 输入字符的最大数 限制用户在键盘上输入的字符的最大数
-N 输入字符数 限制用户在键盘上必须输入的字符数
-p 提示信息 在用户输入之前输出该提示信息
-r 原样读取用户的输入,无转义
-s 静默模式,输入时不显示用户输入的内容,适合密码的输入
-t 设定用户输入的时间,单位为秒,如果超出这个时间,会自动退出,变量将不被读取,返回非0数

其中,我要深度介绍的,主要是选项-n-p-s-t

选项-n

选项-n,用于限制用户在键盘上输入的字符的最大数。举个例儿,如果你想要在系统里读取用户是男还是女,那么,命令就可以这样写:

bash 复制代码
read -n 1 gender
echo $gender

之后,就可以通过gender字符串来获取用户的性别。但是在脚本中,就不同了,你如果在脚本中写这条read命令的话,并且你是用sh来执行它的,那么这条命令大概率就会报错。

因此,我这里有一个方法,不用花太多时间,可以让你的read命令的-n参数起死回生,既然在用sh来执行它的时候会报错,那么我们用bash来执行或者直接调用该脚本就不报错了 。而read-n选项也就看5秒广告复活了。

而如果你觉得用bash执行很不舒服,那么,可以在.bashrc文件里新添上这样一行脚本:alias = sh='bash',因为别名比命令更被优先执行 ,所以照这样,你就可以通过用sh来执行脚本,而使-n选项又加了1命。

选项-p

选项-p,就是在输入前先输出些东西,还是以刚才的例子举例,现在如果你想要让用户知道要输什么,那么就要在read命令的前面添加echo提示用户,当然,再简单一点,还可以用选项-p来提示用户要输什么,就如下。

bash 复制代码
read -p '你是男是女? -- ' -n 1 gender

选项-s

选项-s,就是在用户输入的过程中不显示用户输入的内容,换个例子,假设你的脚本有密码系统,那么确保用户的安全性,如果此时的用户在输入密码的时候显示了密码,密码就容易被别人偷窥,从而让什么人都能霍霍你的电脑。

为了进一步增强用户的安全性,在输入密码的时候,密码要隐藏,想要让密码隐藏,此时-s选项就是你特别的帮助

为了确保用上-s选项后用户真的看不到他自己输入的内容,我们就用read -s来测试一下。

可以看到,用户输入的内容被隐藏掉了。

因此,-s选项适用于密码的输入。像这样的例子,其实还有很多,比如mysql的密码输入;linux系统不以root登录用户时的密码输入,这些全都用到了-s的选项,并且都十分的好用。

选项-t

选项-t,则是一个限制用户输入时间的选项,单位为秒 ,可以让用户在输入的时候不会花太多的时间,回顾刚才的例子,现在的密码系统单是用了-s参数还不够,还要让用户只能在20秒内输入密码,这时,-t这个选项就有用了。

由于要让用户只能在20秒内输入密码,所以选项-t后面的参数就为20,为了看看-t选项的作用,我们执行一下read -t 1

这条命令执行一会就退出了,说明-t选项的作用也生效了。

至于检测-t选项是否超时,只需要输出$?看就行。

下篇预告

实用的alias别名命令------比2=1+1简单的基础命令

相关推荐
千叶寻-36 分钟前
正则表达式
前端·javascript·后端·架构·正则表达式·node.js
小咕聊编程2 小时前
【含文档+源码】基于SpringBoot的过滤协同算法之网上服装商城设计与实现
java·spring boot·后端
追逐时光者8 小时前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
Jagger_8 小时前
敏捷开发流程-精简版
前端·后端
苏打水com9 小时前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧10 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧10 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧10 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧10 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧10 小时前
Spring Cloud Gateway详解与应用实战
后端