文档章节

第4章 处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)

henni_719
 henni_719
发布于 2017/04/22 17:24
字数 963
阅读 33
收藏 0

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

本文转载自:http://blog.csdn.net/henni_719/article/details/53516495

henni_719
粉丝 2
博文 466
码字总数 343938
作品 0
信阳
QA/测试工程师
私信 提问
shell中的read命令详解

read命令 -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显) 1、基本读取 read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说)。得到输入后,read命令将数据放入一个...

热带冠头鱼
2017/02/13
0
0
linux read 用法

linux read 用法 1、基本读取 read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说)。得到输入后,read命令将数据放入一个标准变量中。下面是 read命令 的最简单形式:: ...

Oscarfff
2016/04/06
19
0
事件驱动编程——《Unix/Linux编程实践教程》读书笔记(第7章)

1、curses库 / 基本curses函数 /initscr(); // 初始化curses库和ttyendwin(); // 关闭curses并重置ttyrefresh(); // 使屏幕按照你的意图显示move(r, c); // 移动光标到屏幕的(r, c)位置addst...

木子叶
2014/07/31
280
0
shell script 交互式脚本,可以读取命令行参数、选项,用户输入数据

1.命令行参数 1.1一般参数 1.1.1读取参数 位置参数是标准的数字:$0是程序名,$1~$9是9个参数,如果脚本需要多于9个参数,需要在变量数字周围加花括号,比如${10}、${11}、、、、可以实现向脚...

Caishu
2016/05/13
5.2K
0
C Primer Plus(5版)第8章习题讲解(一)

小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明是“知友” C Primer Plus 第五版的第8章的习题3是我觉得是一个很不错的练手习题,考察输入函数、重...

石家的鱼
2017/07/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
30分钟前
5
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
32分钟前
4
0
IE之css3效果兼容

本文转载于:专业的前端网站▷IE之css3效果兼容 一、兼容css阴影效果(ie滤镜) 1.Shadow,阴影 .shadow { -moz-box-shadow: 3px 3px 4px #000; -webkit-box-shadow: 3px 3px 4px #000; box-sha...

前端老手
35分钟前
4
0
NiushopB2C开源商城功能列表说明:

B2C单商户免费版:PC商城+微商城 B2C单商户标准版:PC商城+微商城组合套餐+阶梯优惠核销功能 B2C单商户企业版:PC商城+微商城拼团+组合套餐阶梯优惠+核销功能 B2C单商户分销版:PC商城+微商城...

niushop-芳
37分钟前
4
0
图片如何转GIF图片呢

如何将生活中拍摄的好玩有趣的图片制作成GIF动图呢?相信很多小伙伴都不知道要如何制作,其实制作方法非常的简单,下面分享一个图片转GIF动图的方法,希望这个方法能够帮助大家在与好友斗图时...

白米稀饭2019
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部