一、循环重定向

最近遇到了一种新的循环重定向写法,由于没看懂,说以网上搜索了一下,然后再此分享一下:

while read line

do

  ......

done  < file

刚开始看,不明白为什么文件内容用重定向方式写入到循环中,而循环还可以正常接收到参数,并执行循环体中的命令。

之前接触的重定向只针对一个命令。而对于循环体的重定向有三条原则:

对循环重定向的输入可适用于循环中的所有需要从标准输入读取数据的命令;

对循环重定向的输出可使用与循环中的所有需要向彼岸准输出写入数据的命令;

当在循环内部显式地使用输入或输出重定向,内部重定向覆盖外部重定向。

在理解上面的循环命令中,read是从标准输入中读取数据。我们需要先了解一下read命令。

扩展:

read

read arg1 arg2 ...

可以将标准输入的值按照顺序赋给指定的参数,每个参数名用空格分隔。

---------------------------------------------------------------------
$ read host ip name
linux 10.0.0.1 licong
$ echo $host $ip $name
linux 10.0.0.1 licong
---------------------------------------------------------------------
可以看到,linux、10.0.0.1、licong分别被赋值给了变量host、ip和name。再看:
$ read host ip
linux 10.0.0.1 licong
$ echo $host
linux
$ echo $ip
10.0.0.1 licong
---------------------------------------------------------------------
当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;
当输入字段比变量数少时,多余的变量将是空值。

read命令的其他用法及案例,可以查看此链接 http://man.linuxde.net/read

本文最开始的while循环,原理是,read通过输入重定向,把file的第一行所有内容复制给变量line,循环体内的命令基本包含

对变量line的处理,然后在循环处理file中的第二行、第三行,以此类推,直到file的最后一行。

while循环如何判断file文件读取完了,然后退出循环体呢?read命令也有一个退出状态,当它从file中有读取到数据,退出状态

就为0,当从file文件中未读取到数据时,退出状态就非0。然后while循环的条件就不成立,从而退出。

使用for循环也能实现相同的结果:

for line in `cat file`

do

  .......

done

博客参考地址链接:http://blog.csdn.net/roler_/article/details/17504039

Linux while和for循环简单分析的更多相关文章

  1. Linux queue.h之TAILQ队列分析

    转自 这两天想看看memcached的实现,所以先学习了libevent,使用起来还是比较简单的,其实是对select/poll/kqueue等的封装,学习libevent过程中又遇到了linux下队 ...

  2. 20135337——Linux实践三:ELF文件格式(64位系统,简单分析)

    ELF文件格式简单分析 (具体分析见上一篇ELF文件格式32位系统) ELF-header 第一行: 457f 464c :魔数: 0201 :64位系统,小端法 01 :文件头版本 剩余默认0: 第 ...

  3. Linux按键驱动程序设计--从简单到不简单【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51399353 混杂设备驱动模型: 1. 混杂设备描述 在Linux系统中,存在一 ...

  4. FFmpeg源代码简单分析:configure

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  5. FFmpeg源代码简单分析:日志输出系统(av_log()等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  6. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  7. Linux系统下MongoDB的简单安装与基本操作

    这篇文章主要介绍了Linux系统下MongoDB的简单安装与基本操作,需要的朋友可以参考下   Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备 ...

  8. CSipSimple 简单分析

    简介 CSipSimple是一款可以在android手机上使用的支持sip的网络电话软件,可以在上面设置使用callda网络电话.连接使用方式最好是使用wifi,或者3g这样上网速度快,打起电话来效果 ...

  9. [转]Handler MessageQueue Looper消息循环原理分析

    Handler MessageQueue Looper消息循环原理分析   Handler概述 Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler ...

随机推荐

  1. 08springMVC拦截器

    u  概述 u  拦截器接口 u  拦截器适配器 u  运行流程图 u  拦截器HelloWorld u  常见应用之性能监控 1      概述 1.1    简介     Spring Web M ...

  2. mbr gpt

    超过2T硬盘的磁盘要用gpt格式,准确地说,应该是分区超过2T地硬盘要选用GPT模式. 做个小推广:程序员经常久坐,颈椎毛病比较多,特别推荐ventry颈椎保健枕

  3. hdu_hpu第八次周赛_1002 大菲波数_201310270958

    大菲波数 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  4. Android:解决cannot find zipalign的问题

    如果当前使用的Android SDK是v20的话,在通过Eclipse或者Intellij IDEA打包Android项目时,会出现一个”cannot find zipalign”的错误. 这个错误的 ...

  5. spring 计时器

    spring 计时器 可以这样: http://blog.csdn.net/u010648555/article/details/52162840 也可以使用annotation <!-- 设置 ...

  6. java调用百度地图API依据地理位置中文获取经纬度

    百度地图api提供了非常多地图相关的免费接口,有利于地理位置相关的开发,百度地图api首页:http://developer.baidu.com/map/. 博主使用过依据地理依据地理位置中文获取经纬 ...

  7. jsp param动作标签

    param 标签以"名字-值"对的形式为其它标签提供附加消息.这个标签与jsp:include.jsp:forward.jsp:plugin标签一起使用. param 动作标签 & ...

  8. 关东升的《从零開始学Swift》即将出版

    大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...

  9. rsync + inotify 打造多server间文件实时同步

    在上篇文章ssh无password登陆server的基础之上.能够利用rsync + Inotify 在多server间实现文件自己主动同步. 例如以下測试机基于三台server做的.内网IP分别例如 ...

  10. Swift代理和传值

    第一个视图控制器: import UIKit // 遵循协议 class ViewController: UIViewController,SecondVCDelegate { override fu ...