zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    第三次作业
    第二次作业
    第一次作业—编译原理概述
    第六次课堂作业——正规文法与正规式
    词法分析程序的设计与实现
    1702第四次作业(文法和语文总结与梳理)
    1702第三次作业(语法树,短语,直接短语,句柄)
    软工1702第一次作业(简述编译程序)
    random库的使用
    基本的字符串之切片
  • 原文地址:https://www.cnblogs.com/vman/p/3043607.html
Copyright © 2011-2022 走看看