4.5.3 TCSH Shell循环结构:while、foreach和repeat

TCSH Shell具有一组循环控制结构,能够实现重复执行命令:while、foreach和repeat。表4-5列出TCSH Shell循环控制结构。

表4-5 TCSH Shell循环控制结构

循环控制结构

描述

while (expression)

commands

end

当表达式的计算值为true,

则while执行对应的动作

foreach variable (arg-list)

commands

end

基于参数列表中参数,逐个执行

循环。每次处理循环时,变量都

会被设置为列表中下一个参数;

操作模式类似于BASH Shell中的for-in

repeat num command

基于指定的数量重复执行命令

continue

跳转到下一次迭代,跳过

循环中其余的命令

break

跳出循环

1.while控制结构

while循环结构会重复执行命令。while循环结构包含关键字while,以及其后圆括号括起来的表达式。while循环结构的结尾使用关键字end。while循环的语法如下所示:while ( expression )

commands

end

wile循环结构可以非常容易地与switch结合使用,以建立要执行的选项菜单。

2.foreach控制结构

foreach控制结构被用来顺序引用值列表。它非常类似于BASH Shell的for-in结构。foreach结构需要两个操作数:一个变量,以及圆括号括起来的值列表。在foreach结构中,列表中每个值逐次被赋予变量。类似于while结构,foreach结构是个循环。每次迭代处理循环时,列表中下一个值就会被赋予这个变量。当到达列表的结尾处,循环就会终止。像while循环一样,foreach循环的循环体结尾处是关键字end。foreach循环的语法如下所示:foreach variable ( list of values )

commands

end

在下一个范例中,mylist脚本会简单地输出列表中每个条目和当天日期。条目列表组成foreach循环所读取的值列表。每个条目逐次被赋予变量grocery。mylist

--------------------

#

settdate=`date '+%D'`

foreach grocery ( milk cookies apples cheese )

echo "$grocery $tdate"

end

$ mylist

milk 12/23/96

cookies 12/23/96

apples 12/23/96

cheese 12/23/96

$

foreach循环非常有利于管理文件。在下面的foreach结构中,可以使用模式中shell特殊字符来生成文件名列表,作为列表值。然后,这种生成的文件名列表会成为foreach结构引用的列表。如果使用星号(*.c)会得到具有.c扩展名的所有文件和目录的列表。这种文件通常是C源代码文件。下面的范例会创建每个文件的一个备份,并把备份文件放在名为sourcebak的备份目录中。模式*.c会生成foreach结构可以操作的文件名列表。cbackup

---------------------------

#

foreach backfile ( *.c )

cp $backfile sourcebak/$backfile

echo $backfile

end

% cbackup

io.c

lib.c

main.c

没有指定值列表的foreach结构会把命令行参数作为值列表。当shell文件被调用时,命令行上参数会成为foreach结构引用的值列表。foreach结构中使用的变量会被自动地顺序设置为每个参数。当***次执行循环时,变量会被赋值为***个参数。第二次会被赋值为第二个参数,依此类推。

在下例的mylistarg脚本中,foreach循环没有指定值列表。相反地,foreach循环会顺序地把命令行参数值读入grocery变量。当读完所有的变量,循环就会终止。mylistarg

---------------------------

#

settdate=`date '+%D'`

foreach grocery ( $argv[*] )

echo "$grocery $tdate"

end

$ mylistarg milk cookies apples cheese

milk 12/23/96

cookies 12/23/96

apples 12/23/96

cheese 12/23/96

$

【责任编辑:云霞 TEL:(010)68476606】

点赞 0

Logo

更多推荐