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
  • 相关阅读:
    再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法
    Linux安装aria2
    POJ 3335 Rotating Scoreboard 半平面交
    hdu 1540 Tunnel Warfare 线段树 区间合并
    hdu 3397 Sequence operation 线段树 区间更新 区间合并
    hud 3308 LCIS 线段树 区间合并
    POJ 3667 Hotel 线段树 区间合并
    POJ 2528 Mayor's posters 贴海报 线段树 区间更新
    POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
    POJ 3468 A Simple Problem with Integers 线段树成段更新
  • 原文地址:https://www.cnblogs.com/vman/p/3043607.html
Copyright © 2011-2022 走看看