Shell 脚本成长笔记

Shell 重定向(二):从文件输入

2017-05-18  本文已影响8人  赵者也

我们通过一些实例,来进一步了解使用输入重定向从文件读取内容的一些方法。

在 Shell 脚本中我们针对某一个代码块使用输入重定向,请看下面的实例,我们在脚本中的一个代码块使用重定向读取文件的内容。

#! /bin/bash

if [ $# -ne 1 ]; then
    echo "Usage: $0 FILEPATH"
    exit
fi

file=$1

{
    read line1
    read line2
} < $file

echo "First line in $file is:"
echo "$line1"

echo "Second line in $file is:"
echo "$line2"

exit 0

上述脚本的运行结果:

运行结果

有时我们可能需要逐行地读取一个文件中的内容,并对每一行进行特定的处理,这时该如何操作?下面的示例,将使用 while 循环与重定向结合使用来逐行地读取文件的内容。

#! /bin/bash

if [ $# -ne 1 ]; then
        echo "Usage: $0 FILEPATH"
        exit
fi

filename=$1

count=0

while read LINE
do
        let count++
        echo "$count $LINE"
done < $filename

echo -e "\nTotal $count lines read."

exit 0

上述实例的运行结果将类似如下所示:

运行结果

当然我们也可以使用 until 循环来实现与上述实例同样的功能:

#! /bin/bash

if [ $# -ne 1 ]; then
        echo "Usage: $0 FILEPATH"
        exit
fi

filename=$1

count=0

until ! read LINE
do
        let count++
        echo "$count $LINE"
done < $filename

echo -e "\nTotal $count lines read."

exit 0

上述实例的运行结果将类似如下所示:

运行结果

上述实例与前一个实例的唯一区别就是语句 “until ! read LINE”。

我们再看一下使用 if 语句结合重定向读取文件的内容:

#! /bin/bash

if [ $# -ne 1 ]; then
        echo "Usage: $0 FILEPATH"
        exit
fi

filename=$1

count=0

if true; then
        read LINE
        let count++
        echo "$count $LINE"
fi < $filename

echo -e "\nTotal $count lines read."

exit 0

上述实例的运行结果将类似如下所示:

运行结果

本文参考自 《Linux Shell命令行及脚本编程实例详解

上一篇 下一篇

猜你喜欢

热点阅读