while和for对文件的读取是有区别的:

1. for对文件的读是按字符串的方式进行的,遇到空格什么后,再读取的数据就会换行显示
2. while对文件读是逐行读完后跳转到下行,while相对for的读取很好的还原数据原始性
 
正常情况下我们按行读取文件都直接用while来实现的,但是在某些特殊情况下使用while可能会出现问题(例如while循环里嵌套sshpass命令时,while在从文件读取数据时,只读取第一行数据就自动退出了,并且退出状态为0),此时我们就必须要使用for循环来逐行从文件读取数据。
目前有info.txt这个文件,里面存储了以空格分割的IP、用户名、密码等信息。
[root@imzcy ~]# cat info.txt
192.168.1.1 zhangsan 123456
192.168.1.2 lisi 111111
192.168.1.3 wangwu 22222
 
 
1.我们按照while的习惯来写脚本尝试使用for读取文件每行数据(当然下面这个脚本是有问题的)。
[root@imzcy ~]for i in $(cat info.txt);do echo $i ;done
for循环会以空格分割读入的数据,所以输出为:
192.168.1.1
zhangsan
123456
192.168.1.2
lisi
111111
192.168.1.3
wangwu
22222
2.shell下使用for循环来按行从文件读入数据(每次读入一整行数据)
#!/bin/bash
f=/root/info.txt
l=`cat $f |wc -l`
 
for i in `seq 1 $l`;
do
  cat $f |head -n $i |tail -n 1
  sleep 1
done
执行结果为:
192.168.1.1 zhangsan 123456
192.168.1.2 lisi 111111
192.168.1.3 wangwu 22222
 
cat $f |head -n $i |tail -n 1 获取某一行
while循环读方式
#!/bin/bash
cat filename | while read line;do
  echo $line
done
192.168.1.1 zhangsan 123456
192.168.1.2 lisi 111111
192.168.1.3 wangwu 22222
while循环读方式2
#/bin/sh
while read line;do
  echo $line
done < filename
while 死循环
while [ "1" = "1" ]
do
  #do something
done
 
将info.txt文件中存储的信息使用逗号分隔,然后使用for循环读取文件内容
cat info.txt
192.168.1.1,zhangsan,123456
192.168.1.2,lisi,111111
192.168.1.3,wangwu,22222
 
ips=`cat info.txt`
for ip in $ips;do
  echo $ip
  ip_info=(${ip//,/ })
  if [ ${#ip_info[@]} -eq 3 ];then
    #do something
  fi
done
 
 
 

shell下读取文件数据的更多相关文章

  1. SHELL下打包文件

    SHELL下打包文件 在我们拿下webshell的时候,想要获取数据或者源码往往会用菜刀或者蚁剑去打包,但是这个时候往往就会出现很多问题,列如打包失败,或者是打包得不完整等等. 这个时候如果对方是wi ...

  2. TensorFlow csv读取文件数据(代码实现)

    TensorFlow csv读取文件数据(代码实现) 大多数人了解 Pandas 及其在处理大数据文件方面的实用性.TensorFlow 提供了读取这种文件的方法. 前面章节中,介绍了如何在 Tens ...

  3. FileInputStream 读取文件数据的输入字节流

    package com.inputstream; /* File类: 用于描述一个文件或者文件夹的. 通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要 ...

  4. Ubuntu系统下MySQL读取文件数据ERROR解决

    博文链接:http://haoyuanliu.github.io/2016/04/29/mysql/ 对,我是来骗访问量的!O(∩_∩)O~~ 在使用MySQL进行文件数据读取的时候,在终端敲入命令行 ...

  5. python中读取文件数据时要注意文件路径

    我们在用python进行数据处理时往往需要将文件中的数据取出来做一些处理,这时我们应该注意数据文件的路径.文件路径不对,回报如下错误: FileNotFoundError: File b'..Adve ...

  6. Android从assets目录下读取文件相关

    有一个需求是app的帮助文档是word格式,ios可以直接用webview加载word显示,Android不行.而美工不配合转换成图片,前端没时间把word写成html 没办法,自己搞. 步骤: 1. ...

  7. Shell 循环读取文件

    使用Shell将Windows环境下的文件拷贝到Linux下面的用法. 在linux下,将dos文件格式转换成linux文件格式的用法,vi打开,然后转到命令格式,执行,然后保存,就可以转换成linu ...

  8. 3、FileInputStream--->类文件输入流(读取文件数据)

    Api介绍 定义 FileInputStream 用于读取诸如图像数据之类的原始字节流.要读取字符流,请考虑使用 FileReader 构造方法 FileInputStream(File file) ...

  9. Linux shell逐行读取文件的方法

    方法1:while循环中执行效率最高,最常用的方法. function while_read_line_bottom(){ while read line do echo $line done < ...

随机推荐

  1. ssh远程主机执行命令或脚本

    1.执行单一命令 [root@vps ~]# ssh user@192.168.9.243 "pwd; ls; rm -f Cent* ;echo --------; ls"/ho ...

  2. Jmeter(五十) - 从入门到精通高级篇 - jmeter 之模拟弱网进行测试(详解教程)

    1.简介 在实际工作中,网络带宽一定不会是持续稳定的保持某一个值,而是有高有低.因此为了测试场景和实际能够无限的接近,所以我们需要模拟一下来达到效果.还有就是在实际的测试工作中,会因为业务需要,有时限 ...

  3. docker部署安装流程第一版

    docker部署安装流程第一版 1.以Dockerfile的方式进行构建docker 以cloud 新联盟为例 dockerfile from hub.c.163.com/library/maven  ...

  4. IOS IAP 自动续订 之 利用rabbitmq延时队列自动轮询检查是否续订成功

    启用针对自动续期订阅的服务器通知: - 官方地址: - https://help.apple.com/app-store-connect/#/dev0067a330b - 相关字段, 相关类型地址:  ...

  5. Jmeter- 笔记10 - 在GUI生成html报告

    步骤1.在聚合报告,浏览一个存放jtl文件的路径,输入不存在的jtl文件,确定后会出现如下图弹窗,不用理会,关掉 步骤2.运行脚本 步骤3.打开工具 -> Generate HTML repor ...

  6. return true 和 return false 和 return

    1.return false:相当于终止符,干了3件事,阻止默认行为,取消事件冒泡,以及停止回调执行立即返回: 2.return:停止回调执行立即返回: 3.return true:相当于执行符,继续 ...

  7. CVPR2019论文观察:感知边缘检测的双向级联网络

    CVPR2019论文观察:感知边缘检测的双向级联网络 BDCN:Bi-Directional Cascade Network for Perceptual Edge Detection 摘要 探索多尺 ...

  8. python+selenium_鼠标事件

    引言--在实际的web产品测试中,对于鼠标的操作,不单单只有click(),有时候还要用到右击.双击.拖动等操作,这些操作包含在ActionChains类中. 一.ActionChains类中鼠标操作 ...

  9. macOS 下使用命令行进行用户(组)管理,就是这么简单! dscl 你很有必要了解一下!!

    大家好,我是@小猿来也... Command-line interface to Directory Services. 在 linux 系统中我们习惯了使用 useradd,userdel,user ...

  10. 【NX二次开发】用户出口函数介绍

    用户出口(User Exit)是NX Open 中的一个重要概念.NX在运行过程中某些特定的位置存在规定的出口,当进程执行到这些出口时,NX会自动检查用户是否在此处已定义了指向内部程序位置的环境变量: ...