Linux Shell学习:使用read从标准输入中读取一行
2013-01-04 11:38
411 查看
http://www.lampbo.org/category/linux-xuexi/page/4
Linux Shell学习:使用read从标准输入中读取一行
2012年06月12日 ⁄ linux ⁄ 暂无评论
read是Linux的一个内建命令,主要完成对参数的赋值,类似C语言中的 scanf。其不仅可以赋值变量,还可以赋值数组;其输入不仅是屏幕,还可以是文件描述符。
用法:
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 举例:
2、-b 举例:
3、-n 举例:
4、-e 举例:
5、-s 举例:
6、-u 举例:
注意看下读入的次序:
这个选项很有用的,特别是自循环读入的时候。
7、下列脚本打印一个文件,这个文件中每行的第一个字段被移动到本行的末尾。
8、为创建一个共同进程,用 print -p 写到共同进程,并用 read -p 从共同进程中读取输入,请输入:
变量 line 的值应该是 "hello world."
9、读取一行,把它分成字段,并使用 "Please enter: " 作为提示符,
请输入:
系统显示:
变量 word1 的值应该是 "hello",变量 word2 应该是 "world."
10、为把输入行的副本保存为历史文件中的一个命令,请输入:
如果输入文件包含 "echo hello world," ,那么在历史记录文件中将会把 "echo hello world" 保存为一个命令。
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" 保存为一个命令。
相关文章推荐
- 如何使用read命令读取文件的每一行
- C++每次读取一行字符串输入(学习笔记) (转)
- 2. 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使用让这个程序能够处理的输入行的长度没有限制
- 如何使用read命令读取文件的每一行
- 如何使用read命令读取文件的每一行
- [Shell学习笔记] read命令从键盘或文件中获取标准输入(转载)
- shell学习之read:从键盘或文件中获取标准输入
- shell学习三十二天----read读取一行
- [NPWP笔记]使用perl循环读取标准输入设备
- C 从标准输入读取源代码并在每一行前加上行标
- [C++ Primer Plus]学习笔记--每次读取一行字符串输入
- 编写一个程序,从标准输入一行一行地读取文本,并完成如下任务:如果文件中有两行或更多行相邻的文本内容相同,那么就打印其中一行,其余行不打印。
- 如何使用read命令读取文件的每一行
- C++从标准输入读取一行字符串
- 使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
- 从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使用让这个程序能够处理的输入行的长度没有限制。
- 初次使用流迭代器从标准输入读取整型数据,根据奇、偶性写入不同文件
- shell学习三十二天----read读取一行
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。