TCL是一种类似shell脚本的语言,你可以使用它来完成许多操作。不过,我介绍它的
主要原因是expect是从它发展出来的。如果你想要写一个能够自动处理输入输出的脚本
(如向用户提问并且验证密码)又不想面对C或者Perl,那么expect是你的唯一选择。

 

11.1.1 TCL语言

要使用TCL,你必须先安装这个程序:

% rpm -q tcl

tcl-8.0.5-30

TCL语言可以用交互式或者脚本的方式执行,要使用交互式的TCL环境,只要输入

$ tclsh

%

出现的"%"符号是TCL的提示符,然后就可以使用TCL命令的。

如果你要使用脚本方式的TCL,首先把你的脚本写成一个文本文件,例如test.tcl,然
后执行

$ tclsh test.tcl

在tcl脚本中,每一行或者是一个命令行,或者是一个注释。注释行必须以#符号开头
,而命令行最好以分号结束,虽然不一定要这样做,但是这样做可以免去不少麻烦。

变量

在tcl中,有两种基本类型的变量,即标量和数组。标量就是一般的数字或者字符串变
量,可以用set语句定义同时赋值:

% set i 1

1

字符串应该用引号括起来:

% set str "test"

'test'

要输出一个标量的内容,使用put语句:

% puts $str

test

$用来说明str是一个变量。puts函数在标准输出显示变量的内容。

数组也可以用set语句定义,实际上,tcl中建立数组只是单个建立数组的元素。例如

% set arr(1) 0

0

% set arr(2) 1

1

这样就建立了一个两个元素的数组arr。在TCL中,不存在相当于数组边界这样的东西
,例如

% set arr(100) to

to

这时数组中实际只存在arr(1),arr(2)和arr(100),这是和C语言不同的地方。用arr
ay size命令可以返回数组的大小:

% array size arr

3

访问数组的方法和访问标两实际是一样的,例如:

% puts $arr(100)

to

可以用同样的方法创建多维数组。

要使用数组中的所有元素,需要使用一种特殊的便利方式。首先要启动startsearsh:

% array startsearch arr

s-1-arr

这里返回了一个搜索id,你可以把它传递给某个变量,因为以后还要使用它进行进一
步的搜索:

% set my_id [array startsearch arr]

s-1-arr

现在my_id的内容是s-1-arr,然后,就可以搜索arr的内容了:

% array nextelement arr $my_id

whi

这里的array nextel