while read line 与 for 区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了while read line 与 for 区别相关的知识,希望对你有一定的参考价值。

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

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

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

[email protected] 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

[[email protected] test]# 

结果

[[email protected] 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

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

[[email protected] 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

[[email protected] test]# 


以上是关于while read line 与 for 区别的主要内容,如果未能解决你的问题,请参考以下文章

shell的for while读取文件写法和区别

Linux shell while read line

cat file | while read line的问题

管道技巧-while read line

while循环创建用户(区别for)

while read line 的字符串截取