一、循环重定向

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

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

最新文章

  1. Android 亮度调节
  2. Android M新的运行时权限开发者需要知道的一切
  3. Android列出所有应用,点击可运行~
  4. 20145312 GDB调试汇编堆栈过程分析
  5. linux下USB转串口驱动的安装
  6. duilib中的V和H布局中滚动条问题
  7. node-sqlserver :微软发布的 SQL Server 的 Node.js 驱动
  8. php之类,对象(四)加载类及练习题
  9. 在共享DLL中使用MFC 和在静态库中使用MFC的区别
  10. sql2008R2数据库备份--双机备份
  11. 在LINQ中实现多条件联合主键LEFT JOIN
  12. 如何使excel表格的内容自动添加前缀
  13. three.js提供的几何体
  14. koa 写简单服务
  15. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
  16. Zephyr学习专题
  17. Excel的导入导出功能
  18. AtCoder Regular Contest 100 Equal Cut
  19. WiscKey: Separating Keys from Values in SSD-Conscious Storage [读后整理]
  20. openwrt lamp

热门文章

  1. Python基础-List找重复数
  2. protel99se 问题汇总(不定期更新)
  3. JavaScript学习总结(7)——JavaScript基础知识汇总
  4. Master Nginx(7) - Nginx for the Developer
  5. [bzoj2743][HEOI2012]采花_树状数组
  6. Go语言基础介绍
  7. HDU 4524
  8. 3D数学读书笔记——多坐标系和向量基础
  9. android开发之使用SQLite数据库(db文件)
  10. linux下启动jekins报错