Shell编程中的用户输入处理(4):在shell脚本中,使用read命令获取命令行输入
2018-01-10 21:51
821 查看
4. 在shell脚本中,使用read命令获取命令行输入
shell-read命令选项:-p(指定提示语句),-n(限定字符个数),-t(设置等待时间),-s(不显示)
4.1 基本读取
read命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。在得到输入之后,read命令把输入数据放入一个标准变量中。下面是read命令的基本形式:# !/bin/bash # 指定shell类型 echo -n "Enter your name:" # 参数-n的作用是不换行,echo默认换行 read name # 把键盘输入放入变量name echo "hello $name,welcome to my program" # 显示输入信息 exit 0 # 返回一个零退出状态,退出shell程序
由于read命令提供了
-p参数,允许在read命令行中直接指定一个提示语句,所以上面的脚本可以简写成下面的形式:
# !/bin/bash # 指定shell类型 read -p "Enter your name:" name # 参数-p指定一个提示语句,并把键盘输入放入变量name echo "hello $name, welcome to my program" # 显示输入信息
上例中,read后面的变量只有name一个,实际上可以有多个。如果有多个输入数据,则应指定多个变量,这样第一个数据赋给第一个变量,第二个数据赋给第二个变量…。
# !/bin/bash # 指定shell类型 read -p "Enter your name age id_card address:" name age id_card address # 通过参数-p指定一个提示语句,并把键盘输入放入变量name echo "hello $name $age $id_card $address , welcome to my program"
如果输入数据个数过多,远大于变量个数,则多余的所有数据都给最后一个变量;如果输入数据太少,不会结束。
# !/bin/bash # 指定shell类型 read -p "Enter your name age id_card address:" name age id_card address echo "hello $address , welcome to my program" # 多输入几个值,多余的值给最后一个变量
如果不指定变量名,那么read命令把接收到的输入放在环境变量REPLY中,例如
read -p "Enter a number"。环境变量REPLY中包含输入的所有数据,在shell脚本中,我们可以正常使用环境变量REPLY。
4.2 输入计时,输入计数
使用read命令有潜在危险,脚本很可能停下来一直等待用户输入。因此,我们可以使用-t选项指定一个计时器,设置等待输入的秒数。当计时器满时,read命令返回一个非零退出状态。
# !/bin/bash # 指定shell类型 # 设置用户输入超时及处理方法 if read -t 5 -p "please enter your name:" name # -t,设置输入超时时间(本语句设置超时时间为5秒),默认单位是秒;-p,指定输入提示 then # 如果不超过5秒 echo "hello $name ,welcome to my script" else # 超过5秒 echo "Timeout" fi
read命令除了可以设置输入计时,还可以设置输入计数。当输入的字符数目达到设定数目时,自动退出,并把输入数据赋给变量。
# !/bin/bash # 指定shell类型 read -n2 -p "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
该例子使用了
-n选项,后接数值1,只要按下1个字符进行回答,无需按回车键,read命令立即接受输入并将其传给变量;如果输入的字符个数小于
-n选项数值,我们就需要按回车键。
4.3 默读(输入不显示在监视器上)
有时,脚本需要用户输入,但用户不希望输入数据显示在监视器上。典型的例子就是输入密码,当然还有很多其他需要隐藏的数据。-s选项能够使read命令中的输入数据不显示在监视器上(实际上,数据是显示的,只是read命令把文本颜色设置成与背景相同)。
# !/bin/bash # 指定shell类型 # 默读(输入不显示在监视器上,如读取隐藏数据、用户密码) read -s -p "Enter your password:" passwd echo # read默认不换行,echo用于换行 echo "your password is $passwd"
4.4 从文件读取输入
最后,我们还可以使用read命令读取Linux系统上的文件。每次调用read命令都会读取文件中的”一行“文本。当文件没有可读行时,read命令以非零状态退出。# !/bin/bash # 指定shell类型 exec 0< TimeOut.sh count=1 # 赋值语句,不加空格 while read line # read读到的值放在line中 do echo "Line $count:$line" count=$[ $count + 1 ] # 注意中括号中的空格 done
读取文件的关键是如何把文本中的数据传送给read命令。最常用的方法是对文件使用cat命令,然后通过管道,把结果直接传送给包含read的while命令。
# !/bin/bash # 指定shell类型 count=1 # 赋值语句,不加空格 cat Timeout.sh | while read line # cat命令查看文件Timeout.sh,然后管道给read命令,作为read的输入;read读到的值放在line中 do # while循环 echo "Line $count:$line" count=$[ $count + 1 ] # 注意中括号中的空格。 done
相关文章推荐
- Shell编程中的用户输入处理(3):在shell脚本中,处理命令行参数
- linux命令行与shell脚本大全_第十三章_处理用户输入
- shell学习之获取用户的输入命令read
- shell基础:使用read、命令行脚本传参实现输入2个整数并计算
- Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
- Linux学习-shell脚本编程基础之处理用户输入
- 使用getopts命令解析shell脚本的命令行选项
- 在 Linux 命令行脚本中执行 sudo 等命令时自动输入密码(使用expect)
- SHELL脚本的基础知识4——处理用户输入
- Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif
- Linux命令行与shell脚本(10)--获得用户输入
- Shell while read命令完成用户的交互输入
- [shell脚本学习]处理用户输入
- Linux命令行与shell编程笔记-13处理用户输入
- 第4章 处理用户输入与显示数据------------(从键盘输入的命令read,对输入计时计数)
- 使用getopt命令解析shell脚本的命令行选项
- dirname命令介绍-使用dirname在shell脚本中获取当前脚本文件所在的绝对路径
- shell脚本使用read命令从terminal读入数据
- shell脚本编程-处理用户输入
- (shell笔记五)第一个shell脚本 helloworld与read命令使用