shell命令获取按键值_Shell脚本中使用read命令接收键盘输入信息

read 命令用来倾听标准输入或文件输入,并把信息存放到变量中。从 read 命令的定义可以看出,倾听键盘是 read 的主要职责之一。

语法格式:

read [选项] [变量名]

选项:

-p “提示信息”:在等待read输入时,输出提示信息。

-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间。

-n 字符数:read 命令只接受指定的字符数,就会执行。

-s:隐藏输入的数据,适用于机密信息的输入。

用例:

#!/bin/bashread-t30 -p"请输入你的姓名:"name

echo"你的姓名是:$name"echo-e"\n"read-s-t30 -p"请输入你的密码:"pwd

read-n1 -t30 -p"Please select your gender【M/F】:"gender

echo"Sex is $gender"

示例二:

#!/bin/bashecho-n"please input your name:"read name

echo"welcome !!! $name"

exit 0

使用 read 命令来倾听用户的输入,并把用户的输入内容自动保存到指定的 name 变量中,最后使用 echo 实现输入内容的显示。

上面的 Shell 脚本是不是已经是最精简的了?当然不是,还可以继续精简,我们可以直接使用 read 自带的显示提示语功能,省略程序中的 echo 语句:

#!/bin/bashread-p"please input your name:"name

echo"welcome !!! $name"

exit 0

上面脚本中的 read 的-p选项就是用来显示提示语的。

在这个例子中,我们只是让 read 来接收 name 变量的值,那么 read 可以同时接收两个甚至更多的变量吗?答案是可以的。

#!/bin/bashread-p"please input your name and place:"name place

echo"welcome $name to $place"

exit 0

看到了吗?read 后面可以指定两个变量 name 和 place,当用户输入完成时,read 会以空格来分割用户的输入内容,并把输入的内容分别存放到后面的变量中。

按照这个规律,read 完全可以指定 3 个、4 个……N 个变量。需要注意的是,当用户的实际输入和程序期望输入的变量个数不等时,又会出现什么情况呢?

这是一个好问题,比如上面的脚本期望用户输入 name 和 place 两个变量的值,而我们却故意输入一个数据或三个数据,这时来看看脚本的执行情况:

示例一:只输入一个数据

[roc@roclinux~]$./test.sh

please input your nameandplace:roc

welcome roc to

示例二:输入多个数据

[roc@roclinux~]$./test.sh

please input your nameandplace:roc beijing shanghai tianjin

welcome roc to beijing shanghai tianjin

通过上面脚本的执行,我们可以得出以下的结论:

如果输入的数据数量少于变量的个数,那么多余的变量不会获取到数据,即变量值为空。

如果输入的数据数量多于变量的个数,那么超出的数据将都赋值给最后一个变量。

还有一个非常特殊的情况,就是在编写脚本时,如果 read 命令后面没有写任何变量,脚本执行时,我们输入数据,那输入的数据会存放到哪里呢?

对于这种极端情况,Shell 的设计者早就预料到了:用户的数据会存放到一个叫作 $REPLY 的环境变量中去。

#!/bin/bash

##read-p"please input your name and place:"echo"welcome $REPLY"

exit 0

[roc@roclinux~]$ bash test.sh

please input your nameandplace:roc beijing

welcome roc beijing

read 非常乐于倾听用户的声音,但有的时候,用户长时间不输入,那 read 也可以有自己的后手。read 命令提供了-t选项,可以用来设置一个倾听的时限。如果超过所设置的时限的话,那么 read 的耐心也就到此为止喽。

#!/bin/bash

ifread-t5 -p"please input your name within 5s:"namethenecho"welcome !!! $name"

elseecho"sorry, too slow"

fi

exit 0

上面的脚本就使用了-t选项,用来指定等待输入的时长(秒)。

上述脚本表示 read 会等待用户的输入,但丑话说在前,如果 5 秒内用户没有响应,那么 read 就会自动结束,并显示“sorry,too slow”来抱怨一下用户。可见,read 命令也可以有自己的态度的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值