• Linux—read


    read:将信息读入一个或多个Shell变量
        语法格式:read [-r] 变量名
        选项:
            -r:原始读入,不做任何处理,不将结尾结尾处的反斜杠解释为续行字符
        行为模式:自标准输入读取数据后,通过Shell字段分隔的功能(使用$IFS)进行切分,第一个单词赋给第一个变量,第二
                  个单词赋给第二个变量,以此类推。如果单词多与变量,则剩下的单词,全赋给最后一个变量。read一旦遇到
                  文件结尾(end-of-file),会以失败值退出。
                  如果输入行以反斜杠结尾,则read会丢弃反斜杠和换行字符,然后继续读取下一行。如果有-r选项,那么read
                  就会以字面含义读取最后的反斜杠。
           linlin@ubuntu:~$ read TOM
           cat
           linlin@ubuntu:~$ echo $TOM
           cat
           linlin@ubuntu:~$ read JERRY MARRY
           dog pear apple
           linlin@ubuntu:~$ echo $JERRY
           dog
           linlin@ubuntu:~$ echo $MARRY
           pear apple
     
        警告:当将read使用在管道时,许多Shell会在一个分开的进程内执行它,在这种情况下,任何以read设置的变量,都不会
              保留它们在父Shell里的值,对管道中间的循环,也是这样。
             
        read最典型的用法是处理/etc/passwd文件,可以使用简单的循环逐行处理:
        #!/bin/bash
      #
      while IFS=: read USER PASS UID GID FULLNAME HOMEDIR SEHLE
      do
        ... 处理每个用户
      done < /etc/passwd
      这个循环并不是说“当IPS等于冒号时,便读取。。。”,而是通过IFS设置,让read使用冒号作为分隔字符,而并不影响IFS
      的值,它只改变read所继承的环境内的IFS值。
      当遇到文件尾时,read会以非零值退出,这个操作会使while循环终止。
      将/etc/passwd的重定向放置于循环体的结尾有点奇怪,不过这是必须的,这样才能使read在每次循环的时候看到后续的行,
      如果循环写成:
        while IFS=: read USER PASS UID GID FULLNAME HOMEDIR SEHLE < /etc/passwd
        do
          ... 处理每个用户
        done
        循环就永远不会终止,每次循环时,Shell都会在打开/etc/passwd一次,且read只读取文件的第一行。
        这种循环还有另一种替代的方式,就是在管道里把cat和循环一起使用:
           cat /etc/passwd |
          while IFS=: read USER PASS USERID GROUPID FULLNAME HOMEDIR SEHLE
          do
            处理方式
          done
        小技巧:任何命令都能用来将输入通过管道传送给read。当read用在循环中时,这个方法格外有效。

  • 相关阅读:
    6 原型模式
    10 观察者模式
    4 代理模式
    写错误日志
    C#事件的使用
    将int型数字转换成7位字符串,不足的时候,前面补0
    Excel 2010导数据到SQL SERVER 2008
    jquery checkbox
    修改注册表开启IE跨域访问功能
    存储过程一例
  • 原文地址:https://www.cnblogs.com/lnlin/p/7107211.html
Copyright © 2020-2023  润新知