如何在Bash脚本中逐行读取文件?

时间:2017-07-15 10:07:23

标签: linux bash file io

我在使用bash脚本逐行读取文件时遇到问题。这是脚本:

#!/bin/bash

file="cam.txt"

while IFS=: read -r xf1 xf2 xf3
do
     printf 'Loop: %s %s %s\n' "$xf1" "$xf2" "$xf3"
     f1=$xf1
     f2=$xf2
     f3=$xf3
done < $file
printf 'After: %s %s %s\n' "$f1" "$f2" "$f3"

以下是cam.txt

192.168.0.159
554
554

这是输出:

Loop: 192.168.0.159  
Loop: 554  
Loop: 554  
After: 554

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

您的代码让我相信您希望每个行都在一个变量中。

试试这个脚本(我知道这可以更轻松,更漂亮,但这是一个简单易读的例子):

#!/bin/bash
file="cam.txt"

while read -r line
do
    printf 'Line: %s\n' "$line"

    current=$line
    last=$current
    secondlast=$last

    printf 'Loop: %s %s %s\n' "$current" "$last" "$secondlast"
done < $file

printf 'After: %s %s %s\n' "$current" "$last" "$secondlast"

更简单的版本:

{ read -r first; read -r second; read -r third; } <cam.txt
printf 'After: %s %s %s\n' "$first" "$second" "$third"