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