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用在循环中时,这个方法格外有效。

Linux—read的更多相关文章

  1. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  2. Linux 内核概述 - Linux Kernel

    Linux 内核学习笔记整理. Unix unix 已有40历史,但计算机科学家仍认为其是现存操作系统中最大和最优秀的系统,它已成为一种传奇的存在,历经时间的考验却依然声名不坠. 1973 年,在用 ...

  3. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  6. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  7. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  8. SQL Server on Linux 理由浅析

    SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...

  9. Microsoft Loves Linux

    微软新任CEO纳德拉提出的“Microsoft Loves Linux”,并且微软宣布.NET框架的开源,近期Microsoft不但宣布了Linux平台的SQL Server,还宣布了Microsof ...

  10. Linux 江湖系列阶段性总结

    引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...

随机推荐

  1. 连接远程docker内的mysql(navicat)

    拉取mysql镜像 docker pull mysql:5.6 查看mysql镜像 docker images | grep mysql 启动mysql容器 docker run -p 3306:33 ...

  2. “打开ftp服务器上的文件夹时发生错误,请检查是否有权限访问该文件夹"

    阿里云虚拟主机上传网站程序 问题场景:网页制作完成后,程序需上传至虚拟主机 注意事项: 1.Windows系统的主机请将全部网页文件直接上传到FTP根目录,即 / . 2. 如果网页文件较多,上传较慢 ...

  3. JavaScript中的内置函数

    JavaScript中的内置函数 制作人:全心全意 在使用JavaScript语言时,除了可以自定义函数之外,还可以使用JavaScript的内置函数,这些内置函数是由JavaScript语言自身提供 ...

  4. 如何将已经安装从chrome扩展程序导出备份为.CRX文件?

    之前介绍过CRX Extractor可以从chrome应用商店下载备份扩展程序,有读者朋友问说:如果 Google Chrome扩展程序已经从 Chrome应用商店下架,还有没有方法下载呢?通常网路上 ...

  5. 【UVA 10820】Send a Table(欧拉函数)

    Description When participating in programming contests, you sometimes face the following problem: Yo ...

  6. 关于自由拖拽完成的剪切区域(UI组件之图片剪切器)

    var x, y,areaWidth,areaHeight; var down;//闪光的判断标准,很好 addEvent(canvas,'mousedown',function(e){ // con ...

  7. 什么是slug URL 中的 slug

    How would you reference this object with a URL, with a meaningful name? You could use Article.id so ...

  8. 【HTML/XML 6】XML文档的基本组成

    导读:大致上,一个XML文档可以由三个部分组成,即声明区.定义区和文档主体区.在XML文档中,各个组成部分都包含特定的内容,有着不同的作用.本篇博客,通过分析上篇博客中的XML实例,来了解XML文档 ...

  9. c# 类如何生成dll文件及引用

    1.打开“工具”菜单下的“外部工具”子菜单: 2.点击“添加按钮,增加一个菜单,菜单内容填写如下: 注意参数那里为:/k "C:\vs2010\VC\vcvarsall.bat" ...

  10. 什么样的经历,才能领悟成为架构师? >>>

    什么样的经历,才能领悟成为架构师? >>> 本文主要分析 SpringBoot 的启动过程. SpringBoot的版本为:2.1.0 release,最新版本. 一.时序图 还是老 ...