Linux内建命令——Read

1 root@kali:~# uname -a;bash --version;
2 Linux kali 3.7-trunk-686-pae #1 SMP Debian 3.7.2-0+kali5 i686 GNU/Linux
3 GNU bash, 版本 4.2.37(1)-release (i486-pc-linux-gnu)
4 Copyright (C) 2011 Free Software Foundation, Inc.
5 许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>
6 
7 这是自由软件,您可以自由地更改和重新发布。
8 在法律允许的范围内没有担保.
9 root@kali:~# 

read是bash的内建(built-in)命令,用于从stdin中读取内容,即与键盘输入交互。

 1 #!/bin/bash
 2 #echo_sh
 3 echo -n "Enter the value of variable 'var1':"
 4 #-n选项用于阻止换行
 5 read var1
 6 # 注意: 在var1前面没有'$', 因为变量正在被设置.
 7 echo "var1=$var1"
 8 echo -n "Enter the value of variable 'var2' 'var3' 'var4':"
 9 read var2 var3 var4 #一次读取多个内容分别赋值给多个变量(使用空格或者TAB分隔)
10 echo "var2=$var2"
11 echo "var3=$var3"
12 echo "var4=$var4"
13 exit 0
14 ==========================================
15 root@kali:/home/Shell# ./echo_sh 
16 Enter the value of variable 'var1':test1
17 var1=test1
18 Enter the value of variable 'var2' 'var3' 'var4':test2 test3 test4
19 var2=test2
20 var3=test3
21 var4=test4

【注】如果read后面不跟一个变量,默认将读取的内容保存在变量$REPLY中。

root@kali:/home/Shell# read
如果read后面不跟一个变量,默认将读取的内容保存在变量$REPLY中。
root@kali:/home/Shell# echo $REPLY
如果read后面不跟一个变量,默认将读取的内容保存在变量$REPLY中。
root@kali:/home/Shell# 

【注】使用'\'分行,使read读取分行输入的内容。

 1 root@kali:/home/Shell# cat read_test.sh 
 2 #!/bin/bash
 3 echo "enter 1:"
 4 read line1
 5 echo 
 6 echo $line1
 7 
 8 echo 
 9 echo "enter 2:"
10 read -r line2 #使用-r选项,将'\'转义,read还有一些其他的选项,如-s、-n、-p
11 echo 
12 echo $line2
13 root@kali:/home/Shell# ./read_test.sh 
14 enter 1:
15 line1\
16 line2 \
17 line3
18 
19 line1line2 line3
20 
21 enter 2:
22 line1 \
23 
24 line1 \

 

【注】read使用重定向:替代stdin,从某个文件或者管道读取输入内容。用起来有点复杂。

1 #当read只有1个参数时,默认将文件的第一行读取并赋值
2 root@kali:/home/Shell# cat ./read_0x01.sh 
3 #!/bin/bash
4 read var1 < $0
5 echo "var1 = $var1"
6 
7 root@kali:/home/Shell# ./read_0x01.sh 
8 var1 = #!/bin/bash
9 root@kali:/home/Shell# 

当read的参数增加时,情况就变了,增加上面的测试代码:

 1 root@kali:/home/Shell# cat ./read_0x01.sh 
 2 #! /bin/bash
 3 read var1 < $0
 4 echo "var1 = $var1"
 5 read var2 var3 <$0
 6 echo "var2 = $var2  var3 = $var3"
 7 #注意首行的空白分隔符
 8 #运行结果如下:
 9 root@kali:/home/Shell# ./read_0x01.sh 
10 #var1同以前一致
11 var1 = #! /bin/bash
12 #重新从文件的首行读入变量
13 #且每个变量都设置成了字符串,而不是一个整行
14 #而后面一个变量将会取得第一行剩余的部分(以空白符分隔)
15 var2 = #!  var3 = /bin/bash

 

 

posted @ 2013-04-25 21:52  Vman  Views(537)  Comments(0Edit  收藏  举报