ITEEDU

9.4. I/0 重定向和循环

9.4.1. 输入重定向

除了测试命令的结果或者依赖于用户的输入来控制循环,你可以指定读取一个文件来控制循环。这样的情况下, read 经常是控制命令。只要输入行进入循环,循环命令就继续下去。一旦所有的行输入都被读取,循环就退出。

既然循环结构被认为是一个命令结构(比如 while TEST-COMMAND; do CONSEQUENT-COMMANDS; done),重定向应该在 done 语句之后出现,所以遵从这样的形式:

command < file

这种样子的重定向也可以在其它种类的循环中起作用。

9.4.2. 输出重定向

在下面的例子中,find 命令的输出被用作 read 命令的输入来控制一个 while 循环:

[carol@octarine ~/testdir] cat archiveoldstuff.sh
#!/bin/bash

# This script creates a subdirectory in the current directory, to which old
# files are moved.
# Might be something for cron (if slightly adapted) to execute weekly or 
# monthly.

ARCHIVENR=`date +%Y%m%d`
DESTDIR="$PWD/archive-$ARCHIVENR"

mkdir $DESTDIR

find $PWD -type f -a -mtime +5 | while read file
do
gzip "$file"; mv "$file".gz "$DESTDIR"
echo "$file archived"
done

文件在被移入存档目录之前就先被压缩了。