Shell脚本方法--从文件中逐行读取内容

从文件逐行读取数据的方法有两种,一种是在while循环或until循环中使用read命令,通过文件描述符一行一行的读取文件内容;另一种是在for循环中使用cat <filename>来读取文件的内容。

1.使用for循环从文件中逐行读取内容:在默认情况现下此方法是逐个单词的读取文件内容,因为使用这种方法读取文件时,他使用环境变量IFS的值作为分隔符,由于IFS的默认值是“<space/空格>”“<tab/制表符>”“<newline/新行>”,所以他首先以空格作为分隔符来读取文件内容,因此如果使用for循环逐行读取内容,在for循环开始之前需要先修改变量IFS的值,等for循环结束后再将IFS的值改回来。

示例1:

#!/bin/bash
bak=$IFS                                         #定义一个变量bak保存IFS的值
if [ $# -ne 1 ];then                          #判断位置参数是否为1
   echo "Usage $0 filename"
   exit
fi
if [ ! -f $1 ];then                              #判断位置参数是否为文件
   echo "the $1 is not a file"
   exit
fi 
IFS=$'\n'                                        #将环境变量IFS的值修改为换行符
for i in `cat $1`                                #逐行读取文件内容并打印到屏幕
do
   echo $i
done

IFS=$bak                                       #将环境变量IFS的值改回原值


示例2:如果不修改变量IFS的值,系统默认按照IFS的原值,按空格来读取文件

#!/bin/bash
if [ $# -ne 1 ];then
   echo "Usage $0 filename"
   exit
fi
if [ ! -f $1 ];then
   echo "the $1 is not a file"
   exit
fi
for i in `cat $1`
do
   echo $i
done

2.在脚本中定义代码块,使用重定向逐行读取文件内容:

示例:

#!/bin/bash
if [ $# -ne 1 ];then                          #判断脚本参数是否为1
  echo "Usage:$0 filename"
  exit 1
fi
file=$1                                            #将脚本参数参数赋值给变量file
{                                                       #定义代码块,大括号{}中的代码即为代码块
  read line1 
  read line2
} <$file                                             #使用$file将代码块的标准输入指向文件$file
echo "first line in $file is $line1"      #输出文件内容
echo "second line in $file is $line2"

exit 2


3.使用while循环结合read命令逐行读取文件内容:

#!/bin/bash
if [ $# -ne 1 ];then
  echo "Usage:$0 filename"
  exit 1
fi
file=$1
if [ ! -f $file ];then
  echo "the $file is not a file"
  exit 2
fi
count=0
while read line      #使用read命令循环读取文件内容,并将读取的文件内容赋值给变量line
do
   let count++
   echo "$count $line"
done <$file           #“done <$file”将整个while循环的标准输入指向文件$file
echo -e "\ntotle $count lines read"

exit 0





  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值