我们通过一些实例,来进一步了解使用输入重定向从文件读取内容的一些方法。
在 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命令行及脚本编程实例详解 》
网友评论