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
上述脚本的运行结果:
![](https://img.haomeiwen.com/i4011078/10781a846abc1b29.png)
有时我们可能需要逐行地读取一个文件中的内容,并对每一行进行特定的处理,这时该如何操作?下面的示例,将使用 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
上述实例的运行结果将类似如下所示:
![](http://upload-images.jianshu.io/upload_images/4011078-b024c8027b4001c6.png)
当然我们也可以使用 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
上述实例的运行结果将类似如下所示:
![](http://upload-images.jianshu.io/upload_images/4011078-febb676803746b16.png)
上述实例与前一个实例的唯一区别就是语句 “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
上述实例的运行结果将类似如下所示:
![](http://upload-images.jianshu.io/upload_images/4011078-07c9b1a4712b90b0.png)
本文参考自 《Linux Shell命令行及脚本编程实例详解 》