zoukankan      html  css  js  c++  java
  • 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用在循环中时,这个方法格外有效。

  • 相关阅读:
    win10重装vscode后打不开
    GDB 调试
    分布式架构--概述一
    汇编语言答案(王爽)第三版
    matplotlib之热成像图
    matplotlib之等高线图
    matplotlib之饼状图
    matplotlib之条形图绘制
    360图片网站批量抓取
    数据转换
  • 原文地址:https://www.cnblogs.com/lnlin/p/7107211.html
Copyright © 2011-2022 走看看