7.for语句
对列表的每一条目都进行一次循环过程
,每完成一次循环过程就将var赋予列表中下一个条目,直到完成最后一个条目的循环为止
语法: 例子:
for var in list $ cat test_for
do for X in 1 2 3 4 5
list A do
done echo "2 * $X is \c"
let X=X*2
echo $X
done
$ test_for
2 * 1 is 2
2 * 2 is 4
2 * 3 is 6
2 * 4 is 8
2 * 5 is 10
在上例中,关键字为for,in,do和done,var代表一个shell变量的名字,这个变量的赋值会贯穿for循环的执行过程中,list是一串由空格或者tab分割开的字符串,在每一次循环执行都要将一个串赋值给var。
for循环的执行过程如下:
1.shell变量var被设置等于list中的第一个字符。
2.list A中的命令会被执行。
3.shell变量var被设置等于list中下一个字符。
4.list A中的命令被执行。
5.循环会持续执行,直到每一个list中的条目都执行过循环为止。
8.for循环的例子
例A:
$ cat example_A
for NAME in $(grep home /etc/passwd | cut -f1 -d:)
do
mail $NAME < mtg.minutes
echo mailed mtg.minutes to $NAME
done
例B
$ cat example_B
for FILE in *
do
if
test -d $FILE
then
ls -F $FILE
fi
done
for结构是一种非常灵活的循环结构,它能够让循环贯穿任何能产生的列表。使用命令替代可以很容易产生生成列表,就像第一个例子使用管道和过滤器可以产生一个列表。如果你要求多次存取相同的列表,你也许想要将它存储到个文件中。你可以使用cat命令来为你的for循环产生列表,正如下例所示:
$ cat students
user1
user2
user3
user4
$ cat for_student_file_copy
for NAME in $(cat students)
do
cp test.file /home/$NAME
chown $NAME /home/$NAME/test.file
chmod g-w,o-w /home/$NAME/test.file
echo done $NAME
done
$
存取命令行参数
你可以从命令行参数来产生list:
for i in $* 或者 for i
do do
cp $i $HOME/backups cp $i $HOME/backups
done done