美文网首页Shell 脚本成长笔记
Shell 重定向(二):从文件输入

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

作者: 赵者也 | 来源:发表于2017-05-18 21:32 被阅读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命令行及脚本编程实例详解

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/werjxxtx.html