read命令 -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显)

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

1
2
3
4
5
#!/bin/bash
echo -"Enter your name:"   //参数-n的作用是不换行,echo默认是换行
read  name                   //从键盘输入
echo "hello $name,welcome to my program"     //显示信息
exit 0                       //退出shell程序。

由于read命令提供了-p参数,允许在read命令行中直接指定一个提示。
所以上面的脚本可以简写成下面的脚本::

1
2
3
4
#!/bin/bash
read -"Enter your name:" name
echo "hello $name, welcome to my program"
exit 0

在上面read后面的变量只有name一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二个变量,如果输入数据个数过多,则最后所有的值都给第一个变量。如果太少输入不会结束。
在read命令行中也可以不指定变量.如果不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中。
例如::
read -p "Enter a number"

环境变量REPLY中包含输入的所有数据,可以像使用其他变量一样在shell脚本中使用环境变量REPLY.

2、计时输入.
使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。
-t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态;

1
2
3
4
5
6
7
8
#!/bin/bash
if read -5 -"please enter your name:" name
then
    echo "hello $name ,welcome to my script"
else
    echo "sorry,too slow"
fi
exit 0

除了输入时间计时,还可以设置read命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
read -n1 -"Do you want to continue [Y/N]?" answer
case $answer in
Y | y)
      echo "fine ,continue";;
N | n)
      echo "ok,good bye";;
*)
     echo "error choice";;
esac
exit 0

该例子使用了-n选项,后接数值1,指示read命令只要接受到一个字符就退出。只要按下一个字符进行回答,read命令立即
接受输入并将其传给变量。无需按回车键。

3、默读(输入不显示在监视器上)
有时会需要脚本用户输入,但不希望输入的数据显示在监视器上。典型的例子就是输入密码,当然还有很多其他需要隐藏的数据。
-s选项能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色)。

1
2
3
4
#!/bin/bash
read  -s  -"Enter your password:" pass
echo "your password is $pass"
exit 0

4、读文件
最后,还可以使用read命令读取Linux系统上的文件。
每次调用read命令都会读取文件中的"一行"文本。当文件没有可读的行时,read命令将以非零状态退出。
读取文件的关键是如何将文本中的数据传送给read命令。
最常用的方法是对文件使用cat命令并通过管道将结果直接传送给包含read命令的while命令
例子::

1
2
3
4
5
6
7
8
9
#!/bin/bash
count=1    //赋值语句,不加空格
cat test | while read line        //cat 命令的输出作为read命令的输入,read读到的值放在line中
do
   echo "Line $count:$line"
   count=$[ $count + 1 ]          //注意中括号中的空格。
done
echo "finish"
exit 0

最新文章

  1. ThinkPHP 3.2.3 使用 Swift Mailer 邮件系统发送邮件
  2. 从PowerDesigner表字段的Name到EF实体类属性的Display Name(根据PowerDesigner生成EF实体类中文注释和验证元数据)
  3. No Architectures to Compile for (ONLY_ACTIVE_ARCH=
  4. 主机无法访问虚拟机Linux的apache
  5. JavaScript:JSON
  6. POJ 1182 食物链
  7. jQuery对表单元素的取值和赋值操作代码
  8. ASP.NET MVC强制返回XML
  9. cscope的使用
  10. 服务器批量管理软件ansible安装以及配置
  11. Nginx与ftp服务器
  12. Javascript高级编程学习笔记(82)—— 富文本操作(2)
  13. ettercap 模块使用
  14. 最短路径遍历所有的节点 Shortest Path Visiting All Nodes
  15. vue之后台管理系统遇到的几个痛点
  16. notepad++ jstool 插件安装
  17. [golang note] 协程通信
  18. android.view.WindowLeaked的解决办法
  19. 【原创】MapReduce程序如何在集群上执行
  20. [ShaderStaff] Sprite Outline外轮廓效果

热门文章

  1. 码云平台, 生成并部署SSH key
  2. gerrit添加appkey以及简单添加分支
  3. Java基础语法 - 面向对象 - 类的主方法main方法
  4. 剑指Offer——从尾到头打印链表
  5. Java创建Timestamp的几种方式
  6. docker 构建镜像 centos7 nginx php
  7. 《深入理解Linux网络技术内幕》阅读笔记 --- 路由表
  8. django-应用中和amdin使用富文本编辑器kindeditor
  9. 编程算法 - 全然背包问题 代码(C)
  10. java 多线程 day02 定时器