处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)
Posted WEL测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)相关的知识,希望对你有一定的参考价值。
4.3 获取用户输入
虽然提供命令行选项和参数是从脚本用户处获取数据的好方法,但有时脚本需要具有更高的交互性。有时在脚本执行过程中需要询问一个问题并等待执行脚本的人员的应答。bash shell提供的read命令可以解决这个问题。
4.3.1 基本读取
read命令接受标准输入(键盘)的输入,或其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。echo -n这个命令是抑制字符串结尾的新行符,允许脚本用户在字符串后面立即输入输入数据,而不是在下一行中输入,这使得脚本看起来更整齐。
事实上,在命令选项-p选项,允许在read命令行中直接指定一个提示。read命令将提示后面输入的所有数据赋值给单个变量,或者指定多个变量。输入的每个数据值都被赋值给列表中的下一个变量。如果变量列表中变量数据少于数据数目,则剩余的数据都赋值给最后一个变量。在read命令行中也可以不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中。环境变量REPLY中包含输入的所有数据,可以像其他变量一样在shell脚本中使用环境变量REPLY。
#!/bin/bash
#read命令使用,用echo -n打印输入字符
#echo -e使\\n具有换行功能
echo -n "输出你的名字:"
read word
echo -e "你好,$word,欢迎来喜马拉雅FM!\\n"
#read -p允许在read命令行中直接指定一个提示
read -p "从键盘键入的词:" first second
echo -e "输出从键盘键入的词:$first,$second...\\n"
#read命令行不指定变量,将收到的数据放置在环境变量REPLY中
read -p "进行阶乘的数字:"
factorial=1
for(( count=1;count<=$REPLY;count++ ))
do
factorial=$[ $factorial*$count ]
done
echo -e "对$REPLY进行阶乘的结果:$factorial\\n"
4.3.2 计时
使用read命令存在着潜在危险。脚本很可能会停下来一直等带脚本用户输入数据。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。-t选项指定read命令等待输入的秒数。当计时器计时数满时,read命令返回一个非零退出状态。
因为如果计时器计时数满,read命令会以非零状态退出,所以很容易使用标准的结构语句进行跟踪,如if-then语句或while循环。当计数器满时,if语句失败,shell会执行else部分的命令。
除了输入时间计时,还可以设置read命令计数输入的字符。当输入的字符数目达到预定项目时,自动退出,并将输入的数据赋值给变量。使用“-n数字”这个命令,当输入的字符超过“数字”,read命令立即接受输入并将其传给变量。无需按回车。
#!/bin/bash
#read -t -p选项对输入进行计时
if read -t 10 -p "在10秒内输入用户名:" username
then
echo -e "你好,$username,欢迎来到喜马拉雅FM!\\n"
else
echo -e "输入超时,请在10秒内输入完成...\\n"
fi
#read -n num -p选项对输入字符进行计数
echo -e "Do you want to continue?(Y/N)\\n"
read -n 1 answer
case $answer in
Y | y) echo -e "\\nFine,continue to input...\\n";;
N | n) echo -e "\\nOK,good bye!\\n";;
*) echo -e "\\nInput the $answer illegal characters!\\n";;
esac
以上是关于处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)的主要内容,如果未能解决你的问题,请参考以下文章
处理用户输入与显示数据------------(禁止命令输出lsof命令关闭文件描述符创建读取/写入文件描述符)
处理用户输入与显示数据------------(getopt命令)
处理用户输入与显示数据------------(参数计数获取所有数据)
处理用户输入与显示数据------------(移位shift命令行参数选项)