【shell】while read line 与for循环的区别
2023-09-14 08:57:29 时间
【背景】
工作过程中遇到要从一个ip列表中获取ip port,然后ssh ip 到目标机器进行特定的操作,但是编写脚本的过程 使用while read line 读取ip列表,在while循环中只读取第一个ip 后就退出脚本的情况。
【介绍】
由例子可见 while read line 是一次性将信息读入并赋值给line ,而for是每次读取一个以空格为分割符的字符串。
【原因】
while中使用重定向机制,IPS中的所有信息都被读入并重定向给了整个while 语句中的line 变量。所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,$line中的最后一行已经读完,无法获取下一行记录,从而退出 while循环。
【解决方法】
1 使用ssh -n "command"
2 ssh "cmd" /dev/null 将ssh 的输入重定向输入。
shell编程之循环语句 while、until 1 while循环语句 重复测试某个条件,只要条件成立则反复执行。 使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while。
工作过程中遇到要从一个ip列表中获取ip port,然后ssh ip 到目标机器进行特定的操作,但是编写脚本的过程 使用while read line 读取ip列表,在while循环中只读取第一个ip 后就退出脚本的情况。
【介绍】
解释上面遇到的问题之前,先看到for 与while的测试对比,文中ip经过修改。
#/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 ===="
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 10.1.1.10 10.1.1.11 10.1.1.11 ....
由例子可见 while read line 是一次性将信息读入并赋值给line ,而for是每次读取一个以空格为分割符的字符串。
【原因】
while中使用重定向机制,IPS中的所有信息都被读入并重定向给了整个while 语句中的line 变量。所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,$line中的最后一行已经读完,无法获取下一行记录,从而退出 while循环。
【解决方法】
1 使用ssh -n "command"
2 ssh "cmd" /dev/null 将ssh 的输入重定向输入。
shell编程之循环语句 while、until 1 while循环语句 重复测试某个条件,只要条件成立则反复执行。 使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while。
相关文章
- Shell入门教程:流程控制(5)for 循环
- Vue循环中v-for和of,in
- 一段linux shell 代码涉及for循环和if esle
- Linux Shell脚本自动化编程实战- shell内置命令 break、continue
- mysql 批量数据循环插入
- VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)&逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略
- 【异常】记一次因修复漏洞扫描导致SpringSecurity出现的循环依赖问题
- 【阶段四】Python深度学习08篇:深度学习项目实战:循环神经网络SimpleRNN、LSTM进行淘宝商品评论文本情感分析
- Python实现GWO智能灰狼优化算法优化循环神经网络回归模型(LSTM回归算法)项目实战
- Casperjs循环执行(重复执行不退出)
- 【编程实践】Linux Shell 编程:使用 循环和递归 实现斐波那契数列代码
- 20.第六章 Shell脚本编程基础入门 -- shell 脚本语言的基本用法(三)
- leaflet只显示一屏地图,设定范围不让循环延展(示例代码039)
- 【Linux之Shell脚本实战】猜拳小游戏shell脚本
- Linux的shell脚本实战之while循环
- Linux系统shell脚本for循环实战之目录权限
- MYSQL提权之反弹SHELL——数据库提权属于webshell到管理员的纵向提权,本质还是利用udf提权,无非是在mysql自定义函数中使用了反弹shell而已
- python基础===文件对象的访问模式,以及计数循环的使用方法
- 多重循环编码规范
- shell - 01 - Shell入门:扎好马步 走的更稳
- shell脚本-while/until循环详解
- shell for 循环、创建多个目录和嵌套目录