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