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
相关文章
|
存储 算法 BI
经典加解密算法——香农算法介绍(附源码!)
经典加解密算法——香农算法介绍(附源码!)
509 0
经典加解密算法——香农算法介绍(附源码!)
|
中间件 Go 数据库
Go开发者必读:Gin框架的实战技巧与最佳实践
在当今快速发展的互联网时代,Web开发的需求日益增长。Go语言以其简洁、高效、并发性强的特点,成为了开发者们的首选。而在Go语言的众多Web框架中,Gin无疑是其中的佼佼者。本文将深入探讨Gin框架的特性、优势以及如何利用Gin构建高性能的Web应用。
|
1月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
391 0
|
7月前
|
人工智能 运维 安全
函数计算支持热门 MCP Server 一键部署
MCP(Model Context Protocol)自2024年发布以来,逐渐成为AI开发领域的实施标准。OpenAI宣布其Agent SDK支持MCP协议,进一步推动了其普及。然而,本地部署的MCP Server因效率低、扩展性差等问题,难以满足复杂生产需求。云上托管成为趋势,函数计算(FC)作为Serverless算力代表,提供一键托管开源MCP Server的能力,解决传统托管痛点,如成本高、弹性差、扩展复杂等。通过CAP平台,用户可快速部署多种热门MCP Server,体验高效灵活的AI应用开发与交互方式。
3607 10
|
机器学习/深度学习 存储 Linux
linux中强大且常用命令:find、xargs、grep
linux中强大且常用命令:find、xargs、grep
901 9
|
编解码 缓存 数据库
构建高效Android应用:从性能优化到用户体验
【5月更文挑战第29天】 在移动开发领域,打造一个流畅且响应迅速的Android应用对于保持用户忠诚度和市场份额至关重要。本文将深入探讨如何通过细致的性能优化措施和关注用户体验设计,来提升Android应用的整体质量。我们将透过代码层面的实践技巧、资源管理和系统机制的优化,以及用户界面和交互设计的改良,共同构建起一个既快速又吸引人的应用程序。
|
移动开发 网络协议 Linux
Linux系统中查看路由表的命令(ip route)
Linux系统中查看路由表的命令(ip route)
1368 0
|
SQL 数据库 数据安全/隐私保护
harbor修改密码
在Harbor `v2.9.0`中,忘记密码可使用以下方法强制重置:通过`docker exec`进入harbor-db容器,使用SQL命令`update harbor_user set salt=&#39;&#39;,password=&#39;&#39; where user_id = 1;`清空admin密码。然后重启Harbor,系统将要求初始化新密码。注意此操作涉及数据库交互,需谨慎执行。
1539 0
【周赛总结】周赛356
【周赛总结】周赛356
126 0