Linux Shell学习:使用read从标准输入中读取一行

http://www.lampbo.org/category/linux-xuexi/page/4


Linux Shell学习:使用read从标准输入中读取一行
2012年06月12日  ⁄ linux  ⁄ 暂无评论

read是Linux的一个内建命令,主要完成对参数的赋值,类似C语言中的 scanf。其不仅可以赋值变量,还可以赋值数组;其输入不仅是屏幕,还可以是文件描述符。

一、read 命令用法和参数

用法:

read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

read [ -p ][  -r ][ -s ][ -u[ n ] ] [  VariableName?Prompt ][ VariableName ... ]

说明:

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量,用 IFS(内部字段分隔符)变量中的字符作为分隔符。VariableName 参数指定 shell 变量的名称,shell 变量获取输入行一个字段的值。

由VariableName 参数指定的第一个 shell 变量指定给每一个字段的值,由VariableName 参数指定的第二个 shell 变量指定给第二个字段的值,以此类推,直到最后一个字段。如果标准输入行的字段比相应的由 VariableName 参数指定的 shell 变量的个数多,把全部余下的字段的值赋给指定的最后的 shell 变量。如果比 shell 变量的个数少,则剩余的 shell 变量被设置为空字符串。

参数:

-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。

-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志,会举例说  明。

-p 后面跟提示信息,即在输入前打印提示信息。

-e 在输入的时候可以时候命令补全功能。

-n 后跟一个数字,定义输入文本的长度,很实用。

-r 屏蔽,如果没有该选项,则作为一个转义字符,有的话 就是个正常的字符了。

-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。

-t 后面跟秒数,定义输入字符的等待时间。

-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

二、示例

1、-a 举例:

[root@Centos6 ~]# read -a tao
qq ww ee rr
[root@Centos6 ~]# echo ${tao[1]}
Ww
hh
(输入一个e)

[root@Centos6 ~]#echo ${tao[3]}
Hh

2、-b 举例:

[root@Centos6 ~]# read -d eof -a tao
ww
dd
gg

3、-n 举例:

[root@Centos6 ~]# read -n3 -p “you can input 3 word:”
you can input 3 word:xxx
(输入3个字符后自动退出!)

4、-e 举例:

[root@Centos6 ~]#read -e file
(tab键补全)
exp1               file               ngis_post.sh       text
exp5               linux-2.6.27.54/   test               xen-3.0.1-install/

5、-s 举例:

[root@Centos6 ~]#read -p password: -s passwd
password:
(这时候输入就不再显示在屏幕上了!)

6、-u 举例:

[root@Centos6 ~]# exec 3<file
[root@Centos6 ~]# read -u 3 tao
[root@Centos6 ~]# echo $tao
hello world!

注意看下读入的次序:

[root@Centos6 ~]# cat file
hello world!
i am good
[root@Centos6 ~]# exec 3<file
[root@Centos6 ~]# read -u 3 tao
[root@Centos6 ~]#test#echo $tao
hello world!
[root@Centos6 ~]# read -u 3 tao
[root@Centos6 ~]# echo $tao
i am good
[root@Centos6 ~]#

这个选项很有用的,特别是自循环读入的时候。


7、下列脚本打印一个文件,这个文件中每行的第一个字段被移动到本行的末尾。

while read -r xx yy
do
print printf "%s %s/n" $yy $xx
done < InputFile

8、为创建一个共同进程,用 print -p 写到共同进程,并用 read -p 从共同进程中读取输入,请输入:

(read; print "hello $REPLY")
print -p "world"
read-p line

变量 line 的值应该是 "hello world."

9、读取一行,把它分成字段,并使用 "Please enter: " 作为提示符,

请输入:

read word1?"Please enter:  " word2

系统显示:

Please enter:
You enter:
hello world

变量 word1 的值应该是 "hello",变量 word2 应该是 "world."

10、为把输入行的副本保存为历史文件中的一个命令,请输入:

read -s line < input_file

如果输入文件包含 "echo hello world," ,那么在历史记录文件中将会把 "echo hello world" 保存为一个命令。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值