看似简单的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简单的基础命令

相关推荐
一 乐13 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
码事漫谈14 小时前
Protocol Buffers 编码原理深度解析
后端
码事漫谈14 小时前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端
踏浪无痕16 小时前
AI 时代架构师如何有效成长?
人工智能·后端·架构
程序员小假16 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
武子康17 小时前
大数据-209 深度理解逻辑回归(Logistic Regression)与梯度下降优化算法
大数据·后端·机器学习
maozexijr17 小时前
Rabbit MQ中@Exchange(durable = “true“) 和 @Queue(durable = “true“) 有什么区别
开发语言·后端·ruby
源码获取_wx:Fegn089517 小时前
基于 vue智慧养老院系统
开发语言·前端·javascript·vue.js·spring boot·后端·课程设计
独断万古他化18 小时前
【Spring 核心: IoC&DI】从原理到注解使用、注入方式全攻略
java·后端·spring·java-ee
毕设源码_郑学姐18 小时前
计算机毕业设计springboot基于HTML5的酒店预订管理系统 基于Spring Boot框架的HTML5酒店预订管理平台设计与实现 HTML5与Spring Boot技术驱动的酒店预订管理系统开
spring boot·后端·课程设计