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

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

在 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命令行及脚本编程实例详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,288评论 25 708
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,954评论 6 342
  • 记忆里的琥珀色仲夏藏着你我多少年华 曾在屋顶结下的誓言 微风一吹就落下 花儿。跟我回去。 我不回去。 ...
    夏日懒猫阅读 520评论 0 0
  • 什么是反射? 反射的作用? 反射性能优化?
    无尽迷茫阅读 230评论 0 0