while read line 与 for 区别

简介:

总结一下while read line 与 for循环的区别(白话)

都是读取文件 while read line 以\n为分割符,而for是以空格为分隔符

补充一点就是:for会一行一行的读取,while read line会一次性读走 ssh遍历时很明显

还有一个需要注意的是从windos拿过来的文件默认行尾都是以\r结尾的,如果不转换linux/unix下就会以为是一行,所以拿过来需要转换一下。还有一个参数IFS是设置分割符的,以下是几个案例:

root@hack test]# cat iptest.sh 

#/bin/bash

IPS="10.1.1.10 3001

10.1.1.10 3003

10.1.1.11 3001

10.1.1.11 3002

10.1.1.11 3004

10.1.1.11 3005

10.1.1.13 3002

10.1.1.13 3003

10.1.1.13 3004

10.1.1.14 3002"

echo "====while test ===="

i=0


echo $IPS | while read line

do

    echo $(($i+1))

    echo $line

done



echo "====for test ===="

n=0

for ip in $IPS ;

do

   n=$(($n+1))

   echo $ip

   echo $n

done

[root@hack test]# 

结果

[root@hack test]# sh iptest.sh 

====while test ====

1

10.1.1.10 3001 10.1.1.10 3003 10.1.1.11 3001 10.1.1.11 3002 10.1.1.11 3004 10.1.1.11 3005 10.1.1.13 3002 10.1.1.13 3003 10.1.1.13 3004 10.1.1.14 3002

====for test ====

10.1.1.10

1

3001

。。。。。。。

10.1.1.14

19

3002

20

[root@hack test]有的人说是echo $IPS会将所有输出当成一个整体通过管道传输给下一个进程所以在一行,当然添加IFS="\n"之后肯定你已经猜到了,后边的这个案例是把IPS添加到文件了,这个while和for的区别更明显,结果自己尝试

[root@hack test]# cat iptest2.sh 

#/bin/bash

#IFS="\n"

echo "====while test ===="

while read line

do

   echo $line 

done < ./ip.log



echo "====for test ===="

for ip in `cat ip.log`;

do

   echo $ip

done

[root@hack test]# 




本文转自 aklaus 51CTO博客,原文链接:http://blog.51cto.com/aklaus/1759038
相关文章
|
存储 缓存
【什么是Read Write Through机制】
【什么是Read Write Through机制】
154 0
UE Operation File [ Read / Write ] DTOperateFile 插件说明
UE Operation File [ Read / Write ] DTOperateFile 插件说明
81 0
|
安全 API
Read-only dynamic data
lwn文章翻译,原文[链接](https://lwn.net/Articles/750215/) ## 简介 本文主要讲述的是一种动态内存的只读保护机制。 ## 原文 内核开发者可以对想保护的数据设置为read-only权限,借助于MMU来避免恶意攻击者的篡改。kernel目前已经支持只读内存保护,但这些内存必须在操作系统自举完成前被初始化,所以局限性很大。Igor Stoppa的
980 0
|
Web App开发 Java 关系型数据库
Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unex
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neue'; color: #454545} span.s1 {font: 12.
4642 0