• Shell代码块重定向

    所谓代码块,就是由多条语句组成的一个整体;for、while、until 循环,或者 if...else、case...in 选择结构,或者由{ }包围的命令都可以称为代码块。

    请转到《Shell组命令》了解更多关于{}的细节。

    将重定向命令放在代码块的结尾处,就可以对代码块中的所有命令实施重定向。

    【实例1】使用 while 循环不断读取 nums.txt 中的数字,计算它们的总和。

    #!/bin/bash
    
    sum=0
    while read n; do
        ((sum += n))
    done <nums.txt  #输入重定向
    echo "sum=$sum"

    将代码保存到 test.sh 并运行:

    [c.biancheng.net]$ cat nums.txt
    80
    33
    129
    71
    100
    222
    8
    [c.biancheng.net]$ . ./test.sh
    sum=643

    对上面的代码进行改进,记录 while 的读取过程,并将输出结果重定向到 log.txt 文件:

    #!/bin/bash
    
    sum=0
    while read n; do
        ((sum += n))
        echo "this number: $n"
    done <nums.txt >log.txt  #同时使用输入输出重定向
    echo "sum=$sum"

    将代码保存到 test.sh 并运行:

    [c.biancheng.net]$ . ./test.sh
    sum=643
    [c.biancheng.net]$ cat log.txt
    this number: 80
    this number: 33
    this number: 129
    this number: 71
    this number: 100
    this number: 222
    this number: 8

    【实例2】对{}包围的代码使用重定向。

    #!/bin/bash
    
    {
        echo "C";
        echo "http://c.biancheng.net";
        echo "7"
    } >log.txt  #输出重定向
    
    {
        read name;
        read url;
        read age
    } <log.txt  #输入重定向
    
    echo "$name已经$age岁了,它的网址是 $url"

    将代码保存到 test.sh 并运行:

    [c.biancheng.net]$ . ./test.sh
    C已经7岁了,它的网址是 http://c.biancheng.net
    [c.biancheng.net]$ cat log.txt
    C
    http://c.biancheng.net
    7

更多...

加载中...