TCL脚本实例解读
系统学习TCL脚本入门教程

系统学习TCL脚本入门教程版本:L0作者:次目录TCL语法 (4)1.1简介 (4)1.2运行环境 (4)1.3本文约定 (4)1.4参考资料 (4)引言 (5)2.1第1课:简单文本输出 (5)2.2第2课:给变量赋值 (5)2.3第3课:命令的赋值与置换一 (6)2.4第4课:命令的赋值与置换二 (7)2.5第5课:命令的赋值与置换三 (7)2.6第6课:算数运算 (8)2.7第7课:文本比较一SWITCH®用 (9)2.8第8课:数值比较一IF应用 (10)2.9第9 课:WHILE 循环 (11)2.10第 10课:FOR循环和INCR (11)2.11第 11 课:过fgPROC (12)2.12第12课:过fgPROC的参数定义 (13)2.13第13课:变量的作用域 (13)2.14第 14 课:LIST^构 (14)2.15第15课:LISTT®的增删改 (15)2.16第16课:更多LISTffl关 (16)2.17第17课:字符串函数 (17)2.18第18课:更多字符串函数 (17)2.19第19课:修改字符串函数 (20)2.20第20课:正则表达式 (21)2.21第21课:更多正则表达式 (22)2.22第22课:数组 (24)2.23第23课:更多数组相关 (25)2.24第24课:文件存取 (28)2.25第25课:文件信息 (30)2.26第26课:TCL中的子进程调用一OPEN & EXEC (33)2.27第27课:命令或者变量是否存在一INFO (34)2.28第28课:解释器状态一INFO (35)2.29第29课:过程信息一INFO (36)2.30第30 课:模块化一SOURCE (37)2.31第31 课:遍库— UNKNOWN & INFO LIBRARY (38)2.32第32课:创建命令一 EVAL (40)2.33第33 课:在EVAL中应用 FORMAT & LIST (40)2.34第34 课:不使用 EVAL誉换一FORMAT& SUBST (42)2.35第35课:改奏工作目录一CD&PWD (43)2.36第36 课:调试和错误一 ERRORINFO & ERRORCODE & CATCH (44)2.37第37 课:调试一TRACE (45)2.38第38课:命令行参数和环境串 (46)2.39第39 课:TIME & UNSET (47)2.40第40 课:SOCKET & FILEEVENT & VWAIT (49)2.41第4谯:日期时间—CLOCK (51)2.42第42 课:I/O通道一 FBLOCKED & FCONFIG (53)2.43第43课:子解释器 (56)2.44第44课:数据库操作 (57)2.45第45课:函数或过程数组的输入和输出方法 (59)2.46第46课:INFO的用法 (59)2.47第47课:多线程 (61)第2页共60页跋 (73)1 TCL语法1.1简介作为脚本语言,tel语法简单而功能强大。
tcl语言eval用法

TCL语言eval用法1.简介T C L(To ol Co mm an dL a ng ua ge)是一种简单、高效、可移植的解释性脚本语言。
它被广泛应用于各种领域,如软件开发、自动化测试和网络编程等。
在TC L语言中,ev al是一个非常强大的命令,它允许动态执行T C L代码。
本文将介绍e va l命令的基本用法和一些常见应用场景。
2. ev al命令的基本用法e v al命令用于执行T C L代码,并将执行的结果作为字符串返回。
e v al命令的基本语法如下:```T CLe v al sc ri pt```其中,s cr ip t参数是包含T CL代码的字符串。
ev al命令会将s c ri pt参数作为TC L代码进行解析和执行,并返回执行结果。
下面是一个简单的示例:```T CLe v al{p ut s"He ll o,W o rl d!"}```上述代码会输出"Hel l o,Wo rl d!",ev al命令将字符串"{pu ts"H el lo,W orl d!"}"解析为T CL代码并执行。
3. ev al命令的常见应用场景3.1动态生成变量和命令e v al命令可以在运行时动态生成变量和命令。
例如,我们可以使用e v al命令实现一个简单的计数器:f o r{se ti1}{$i<=5}{in cr i}{s e tv ar na me"c ou nt$i"s e t$va rn am e$ip u ts"c ou nt$i=$$va r na me"}```上述代码会输出:```c o un t1=1c o un t2=2c o un t3=3c o un t4=4c o un t5=5```e v al命令允许我们在循环中动态生成变量和命令。
3.2动态执行文件在实际应用中,我们有时需要动态执行TC L文件。
vivado tcl语句

vivado tcl语句1. 什么是Vivado TCL语句?Vivado是一种由赛灵思公司开发的综合工具套件,用于设计和实现复杂的数字电路。
TCL(Tool Command Language)是一种脚本语言,由约翰·奥斯汀(John Ousterhout)于1988年开发,用于自动化软件任务。
在Vivado中,你可以使用TCL语句来定义和执行各种操作,例如创建设计工程,生成约束文件,运行综合和实现流程等。
2. 使用TCL语句的优势有哪些?使用TCL语句可以带来许多优势。
首先,TCL是一种脚本语言,它允许你编写一系列命令来执行复杂的任务,无需逐个手动输入命令。
这大大提高了工作效率,减少了错误的可能性。
其次,TCL语句是可编程的,这意味着你可以使用条件语句、循环和函数等控制结构来编写更加灵活和智能的代码。
你可以根据特定需求自定义脚本,以便自动执行一系列任务,而不是手动操作。
此外,TCL语句还可以与其他脚本语言和工具进行交互,例如Python和Shell脚本。
这意味着你可以在TCL脚本中调用其他脚本或工具的功能,以实现更高级的自动化和集成。
3. 如何使用Vivado TCL语句?使用Vivado TCL语句有一些基本步骤。
首先,你需要打开Vivado软件,并创建或打开一个设计工程。
在Vivado界面中,你可以打开"TCL Console"窗口,它允许你在其中输入和执行TCL命令。
接下来,你可以使用TCL语句来执行各种操作,例如创建设计工程、添加源文件、设置约束、运行综合和实现等。
可以使用"source"命令执行一个TCL脚本文件,或者逐个输入命令。
通过在命令前加上"puts"命令,你还可以打印输出结果,以便进行调试和验证。
此外,Vivado还提供了TCL命令的完整文档和参考手册,你可以在其中查找各种命令和用法的详细信息。
这些文档可以帮助你学习和理解TCL 语句的功能和用法。
tcl中while语句

tcl中while语句TCL是一种脚本语言,很多时候我们需要使用一些循环语句来完成特定的任务。
其中while循环是TCL语言中最常用的循环语句之一。
本文将围绕“TCL中while语句”展开阐述,分步骤来介绍如何在TCL中使用while循环。
第一步:while循环的基本语法while循环的基本语法如下所示:while 条件语句 {循环体}其中,条件语句可以是任何TCL合法的表达式,循环体是需要重复执行的一段代码块。
while循环的执行顺序为:首先判断条件语句是否为真,如果为真则执行循环体,然后再次判断条件语句是否为真。
如果条件语句一直为真,则会一直执行循环体。
当条件语句为假时,while循环结束。
第二步:while循环的使用案例下面举一个while循环的实例来说明如何在TCL中使用while循环。
我们要求计算从1到10的和,具体代码如下所示:set i 1set sum 0while {$i <= 10} {set sum [expr {$sum + $i}]set i [expr {$i + 1}]}puts "1到10的和为:$sum"在上面的代码中,我们首先使用set命令定义了变量i和sum的初始值分别为1和0,然后使用while循环来计算1到10的和。
在循环体中,我们使用了set命令对sum变量的值进行累加,并使用set命令对i变量的值加1。
当i的值达到10时,条件语句$i <= 10$不再为真,while循环终止,输出计算结果。
第三步:while循环的注意事项在使用while循环时,需要注意以下几点:1. 一定要设置好循环的结束条件,否则循环会变成无限循环。
2. 循环不要嵌套过多,否则代码可读性和易维护性会降低。
3. 尽量避免使用while循环来处理大量数据,因为while循环会不断判断条件语句,会导致性能下降。
总结本文围绕“TCL中while语句”展开阐述,分步骤来介绍了如何在TCL中使用while循环。
Tcl脚本语言教程

T c l脚本语言教程本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.MarchTcl教程TCL语法■脚本、命令和单词符号 (2)■置换(substitution) (2)■注释 (5)变量■简单变量 (5)■数组 (6)■相关命令 (6)表达式■操作数 (7)■运算符和优先级 (7)■数学函数 (8)List■list命令 (10)■concat命令 (10)■lindex命令 (11)■llength命令 (11)■linsert命令 (11)■lreplace命令 (11)■lrange 命令 (11)■lappend命令 (12)■lsearch 命令 (12)■lsort命令 (13)■split命令 (13)■join命令 (13)控制流■if命令 (13)■循环命令:while 、for、 foreach (14)■eval命令 (15)■source命令 (16)过程(procedure)■过程定义和返回值 (16)■局部变量和全局变量 (17)■缺省参数和可变个数参数 (17)■引用:upvar (18)字符串操作■format命令 (19)■scan命令 (20)■regexp命令■regsub命令■string命令文件访问■文件名■基本文件输入输出命令■随机文件访问■当前工作目录■文件操作和获取文件信息错误和异常■错误■从TCL脚本中产生错误■使用catch捕获错误■其他异常深入TCL■查询数组中的元素■info命令TCL语法 > 脚本、命令和单词符号一个TCL脚本可以包含一个或多个命令。
命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的:set a 1 set b 2或set a 1;set b 2TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。
tcltk实例详解——glob使用例解

tcltk实例详解——glob使⽤例解glob命令这⾥以实例的形式解释⼀下glob命令的⽤法,很多时候纯粹的语法讲解根本讲不清楚,往往没有⼀个例⼦清晰,⼀下就glob命令进⾏⼀些分析,环境为Tclsh85,操作系统为windows XP。
在windows下⾯⽂件夹使⽤/隔开,为了讲述⽅便统⼀使⽤/来描述。
如果需要了解glob命令的使⽤说明,请参考⽂章:最简单的⽅式,cd到⽬标⽬录下,使⽤% glob *显⽰⽬标⽂件加⾥所有的⽂件。
使⽤% glob *.tcl显⽰⽬标⽂件夹⾥所有的.tcl⽂件。
如果搜索不到⽂件就会返回⼀个错误,可以使⽤-nocomplain标志位来使没有⽂件时返回空,直接使⽤% glob testno files matched glob pattern "test"报回⼀个错误,⽽使⽤% glob -nocomplain test就返回空。
如果⽬前不在⽬标⽂件夹,⽽知道⽬标⽂件夹的绝对路径,可以使⽤% glob -directory d:/tcl/ *显⽰⽬标⽂件夹d:/tcl/⾥⾯的⽂件信息。
⽂件信息的显⽰⽅式是显⽰⽂件的完整的路径名。
⽐如d:/tcl/lib,如果只想显⽰lib⽂件名,可以使⽤ % glob -directory d:/tcl/ -tails *-tails表⽰只显⽰⽂件名,可以与-directory和-path⼀起使⽤。
如果知道⽂件的前半部分,需要找后半部分% glob -path d:/tcl/li *返回d:/tcl/lib d:/tcl/licenses d:/tcl/license-at8.5-thread.terms等三个⽂件,如果需要只返回⽂件名,使⽤% glob -path d:/tcl/li -tails *只返回⽂件名lib licenses license-at8.5-thread.terms。
可以限定返回的⽂件类型,使⽤-type来限定,⽐如只返回⽂件夹⽂件% glob -directory d:/tcl/ -type d *只返回⽂件夹⽂件,使⽤-type f只返回普通⽂件等。
TCL脚本技术及用法

TCL内建命令
TCL还提供三种特殊的参数形式: 首先,你可以定义一个没有参数的过程。 % proc add {} { expr 2+3} 其次,可以定义具有缺省参数值的过程。 % proc add {val1 {val2 2} {val3 3}} { % expr $val1+$val2+$val3 %} 另外,TCL的过程定义还支持可变个数的参数,如果 过程的最后一个参数是args, 那么就表示这个过程支持 可变个数的参数调用。
引言
TCL提供了C语言的调用接口,可以很容易地嵌入到C 程序中;由于TCL提供了与C的接口函数,所以可以 在C编写的应用中调用TCL的库函数,执行TCL的命令 或脚本。具体的工作有: ①创建TCL的解释器; ②执行TCL的命令或脚本; ③对返回代码进行处理; ④撤消TCL的解释器。
引言
基本的C程序结构如下: #include <stdio.h> #include <tcl.h> main() { Tcl_Interp *ip; // 定义解释器 int code; ip=Tcl_CreateInterp(); // 创建该解释器 code=Tcl_EvalFile(ip, "test.tcl"); // 执行文件“test.tcl” if(code!=TCL_OK) exit(1); // 是否成功 else exit(0); }
TCL语法
置换
TCL解释器在分析命令时把所有的命令参数当做字符 串对待,置换的作用是获取命令参数所对应的值,而 非命令参数所代表的字符串。 置换包括变量置换、命令置换和反斜杠置换。变量置 换传递的是变量的值,命令置换传递的是命令参数的 计算结果,反斜杠置换主要用于在单词符号中插入诸 如换行符、空格、[、$等被TCL解释器当作特殊符号 对待的字符。置换可以嵌套。
tcl中if语句

tcl中if语句TCL语言中的if语句是一种条件语句,用于根据条件的真假来执行不同的代码块。
在TCL中,if语句的语法如下:```if {条件表达式} {执行语句块1} elseif {条件表达式} {执行语句块2} else {执行语句块3}```下面是关于TCL中if语句的一些例子,以帮助理解其用法和功能。
1. 判断一个数是正数还是负数:```tclset num 10if {$num > 0} {puts "这是一个正数"} elseif {$num < 0} {puts "这是一个负数"} else {puts "这是零"}```2. 判断一个数是否为偶数:```tclset num 8if {$num % 2 == 0} {puts "这是一个偶数"} else {puts "这是一个奇数"}```3. 判断一个年份是否为闰年:```tclset year 2020if {$year % 400 == 0 || ($year % 4 == 0 && $year % 100 != 0)} {puts "$year 是闰年"} else {puts "$year 不是闰年"}```4. 判断一个字符串是否为空:```tclset str ""if {[string length $str] == 0} { puts "这是一个空字符串"} else {puts "这不是一个空字符串"}```5. 判断一个文件是否存在:```tclset filename "test.txt"if {[file exists $filename]} { puts "文件存在"} else {puts "文件不存在"}```6. 判断一个变量是否已经定义:```tclif {[info exists var]} {puts "变量已定义"} else {puts "变量未定义"}```7. 判断一个列表是否为空:```tclset list {}if {[llength $list] == 0} {puts "这是一个空列表"} else {puts "这不是一个空列表"}```8. 判断一个字符串是否以某个前缀开头:```tclset str "hello world"if {[string match "hello*" $str]} {puts "这个字符串以 hello 开头"} else {puts "这个字符串不以 hello 开头" }```9. 判断两个数的大小关系:```tclset num1 10set num2 20if {$num1 < $num2} {puts "$num1 小于 $num2"} elseif {$num1 > $num2} {puts "$num1 大于 $num2"} else {puts "$num1 等于 $num2"}```10. 判断一个字符串是否包含另一个子串:```tclset str "hello world"if {[string match "*world*" $str]} {puts "这个字符串包含子串 world"} else {puts "这个字符串不包含子串 world"}```以上是关于TCL中if语句的一些例子,通过这些例子可以看出if 语句在TCL中的灵活性和功能强大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TCL脚本实例解读作者:杨帆、老卢前言Sigma的这段日子在技术方面感觉提高的方面可能就是脚本的编写吧,我感觉写一个可用的脚本,并不一定非的在于你对脚本有了多了解之后,然后再去实现一个切合实际的脚本,最主要是思路,当你对所需要使用的脚本工具有一定的理解(如:TCL),在一个实际环境,首先能有个明确的想法,想实现个具体的什么东西,怎么样的思路可以实现,大脑里具备了这些条件,就可以尝试去写一些脚本。
当然了,在实现的过程中肯定会遇到这样或者那样的问题,但一般来说,基本都是一些对脚本语法以及命令不熟悉的原因造成,这些问题很好解决,可以跟熟悉脚本的同事讨论,来帮你解决当时的问题,所以,千万不要因为还没有开始,就将脚本看得非常困难,导致自己一直无法迈出第一步,其实有些东西还是比较容易实现的。
所以在此将我写的几个脚本在此解读解读。
文档目的这篇文档中所附带的脚本,主要是根据Sigma这边搭建的系统测试环境而撰写出来的,脚本内容可能与今后Sigma公司为我们所开发的系统测试脚本无关,当撰写完这几个脚本之后,各人感觉有些东西还是比较有价值的,因此本人将此脚本撰写为文档,将这些东西共享出来供大家分享、借鉴、参考,相信看完这篇文档,因该会提供很多切合实际测试的一些脚本开发思路。
还有,这篇文档并非一篇解释TCL命令的文档,有许多脚本中的相关命令不熟悉的地方需要查找其它资料,部分命令只做了解释或者介绍。
感谢!:)这些脚本的撰写过程中感谢小康同学与小井同学的帮助(很多地方错误的查找、以及提供了一些解决关键问题的命令,如果没有他们的帮助,这个脚本完成的难度就大了,有很多也是他们的功劳)环境介绍这里提到的环境主要介绍的是系统测试的物理网络TOP环境与逻辑网络TOP环境,因为脚本里面的内容跟这个具体环境有关:物理网络TOP,物理网络TOP所描述的实际是所有测试PC与DUT连接的物理线路图,实际物理TOP分为两个部分,控制网络与测试网络:(在这个实际环境中要求所有参与测试PC拥有两块可用的物理网卡,一块接控制网络交换机,另一块网卡连接测试网络交换机,测试网络交换机必须支持Vlan 的划分,在某种特殊情况要求有trunk功能的支持,如测试网络交换机接口不足的情况,需要添加新的交换机,不同的交换机相同VLAN之间需要通信的需求,额外话题)控制网络:我们可以从上图看到,所有PC的网卡eth1同在同一数据链路,IP 也在相同网段,控制网络的目的是为了方便通过其中任意一台PC来控制其他的PC做一些事情,比如让某些PC在Testing网络建立一些连接,或者发送一些数据包,如何来控制,其实看完这篇文档实现的脚本,也就没有那么神秘了。
测试网络:实际这个网络就是专门构建我们DUT测试环境的网络TOP,根据划分VLAN创建不同的逻辑TOP。
比如把DUT的某个接口eth0放入某个VLAN,将一些测试PC划入此VLAN,将DUT的另一个接口eth1放入另一个VLAN,其中此VLAN划入一些PC,这个TOP相当于DUT两个接口连接了两个不同,逻辑上的网桥。
(一个VLAN相当于是一个独立的网桥)如下图,我们系统测试测试网络的逻辑TOP(列出供大家参考):从上图可以见到,在实际环境中搭建,至少可能需要六台交换机(少画两台),但在这个环境只用上来两台交换机,使用Vlan和Trunk实现。
脚本介绍在做详细的脚本分析之前我们首先先对这些脚本做一个简单的介绍。
这篇文档脚本实例中有部分是存在一定关系的,目的为执行不同的功能,但可以调用其它脚本执行所产生的变量。
以下列出脚本的文件名称,对以下脚本的功能以及实现的目的做一个简单介绍:reach_host.tcl:检测控制网络存在的PC,将所有存在(可ping通)的PC放入一个变量形成一个列表。
这个文档的目的是因为控制所有控制网络PC去做一些测试操作时,使用的都是IP通信,因此我们要保持测试网络的连通性,可能需要经常的去做一些ping的操作,因此做了一个这样的脚本来执行这件事情。
这个脚本是借鉴Sigma的同事修改过来的,其他所有的脚本思路都是从这个脚本出发。
这个脚本在这一系列脚本中,目的并不只是单纯的测试连通性,其实还有其他用途,比如我们的系统测环境所有PC分为四个区域,每个区域之间的PC的IP并不连续,我们可以通过这个脚本将所有可用的PC做成一个列表,将这个列表应用在其它的脚本。
✧setup_tools.tcl:这是一个单独得脚本,目的是将所有控制网络中可以Ping通的设备安装一些工具。
(其实这个脚本可以扩展,只需要了解其他需要安装的linux软件步骤,即可向此脚本中补充,这里面只是拿出几个例子来提供一些思路)✧ipaddr_configure.tcl这个脚本运用到之前reach_host.tcl运行输出的控制网络存活PC的列表,然后在对这些列表中的PC配置eth0(测试网络)的IP地址。
✧hostname_configure.tcl(此脚本由老卢完成,脚本的解释后续添加)这个脚本运用到之前reach_host.tcl脚本运行输出的结果(所有控制网络可连同PC的IP列表),然后在对这些列表中的PC配置主机名,但每个PC的主机名的第一个字符必须相关区域的字符,比如:A区的第2台PC IP地址为10.11.105.12,B区的第8台PC地址为10.11.105.28,我们根据相同颜色来分析他们的对应关系,A对10,B对20,C对30等(具体可以看系统测试TOP的IP列表)。
✧pc_list.tcl设置所有控制网络的IP变量,可以让其他脚本直接调用,使用其变量,避免每次新的脚本,使用到一些主机名字与IP对应关系得变量,每次都需要申明,避免麻烦就建立了一个这么列表。
相当于在C语言中,我将所有需要经常用到的常量在一个文件中逐个define,然后其他的文件include。
✧traffic_control.tcl这个脚本可能是代码与内容最多的一个了(也是我最有成就感的一个)。
这个脚本的目的是随时地控制TOP图中存在的任意PC与另一台PC建立任意通信(不过目前脚本中只是包含ping与ftp,要将其他的通性方式加入目前非常简单只需要将步骤往脚本中填入),在执行这个脚本时,只需相应主机控制网络存活,不需要了解测试网络中的IP地址,就可以让双方建立通信。
比如:在这个系统网络中,如测试网络逻辑TOP(图二)所列出的PC,我只需要在其中某台PC运行此脚本,如FTP:./traffic.control.tcl A1 ftp A2 get aaa 10执行这个脚本的人不需要知道这两台主机的IP是多少(当然脚本会知道),就可以实现A1主机与A2进行FTP通信,get(可以put)一个aaa的文件,get这个操作循环10次忘了说明,这些脚本都由TCL结合Linux下的命令实现,对以上脚本做一个简单描述只是带领大家能对脚本产生一定的兴趣,其实当看了脚本之后,你们会感觉实际实现起来并非那么神秘,就只是将Linux下的命令调来调去!首先我们先进入第一个脚本的解释吧!!#/usr/bin/tclshset reach ""#设置变量reach,内容为空set unreach ""#设置变量unreach,内容为空set hostbase "10.11.105"#因为我们所有ip的前三个字节相等,变化的只是第四个字节,因此将前三个字节放入变量for {set i 11} {$i<49} {incr i} {#我们的主机第四位字节最低为11,最高为48,设置i为11,小于49,incr代表i递增1 catch {exec ping $hostbase.$i -c 2} r#exec代表在linux执行ping这个命令,-c 2代表只发送两次icmp报文(linux下默认ping是#不会停止的),catch将所有打印付给变量r。
注意:当catch “{}”中如果内容出错,此#程序不会停止,将打印全部交给r,然后继续执行下一条tcl语句,至于$hostbase.$i,我#也是当时才知道原来可以这么连着使用,在执行ping命令之前,将被解释为此次循环的ip #地址,如果此时为第三次循环$hostbase.$i为10.11.105.13if [regexp {ttl} $r] {#判断语句,使用regexp来匹配变量r中是否存在ttl字段(只有ping通系统才会打印此字段)puts "Host $hostbase.$i is Active!"#如果为第三次循环将打印Host 10.11.105.13 is Active!的信息,其中$hostbase.$i将会#被替换为相应得数值lappend reach $hostbase.$i#lappend将这个IP地址追加到reach这个变量,建立一个列表,如果此时为第三次循环,#reach中的变量将是”10.11.105.12 10.11.105.12 10.11.105.13”,其实所谓的列表就是在#变量中各个字符串之间使用空格隔开} else {puts "Host $hostbase.$i is Down!"#如果为假,同样也会打印lappend unreach $hostbase.$i#然后将这个ip追加到unreach这个变量中(行成列表)}}puts "Reach Host Are:$reach"#循环完毕,将所有ping成功的设备ip打印puts "Unreach Host Are:$unreach"#循环完毕,将所有ping失败的设备ip打印看了上面这个脚本是否觉得比较简单?虽然简单,但实际用途中这个脚本是非常有用的,在系统测试实施中,既省时间又省力!而且在其他的脚本中都会用到此脚本首先做个探测,将所有可以连通的主机做一些操作,其实还有个用处,要知道,我们定义的主机区域之间的IP并不是连续的,通过这种方法我们可以把中间不连续的ip空缺给排除,这后去案例中可以看到。
在讲述第二个脚本之前,我首先在此简单的提一下关于expect这个命令,这个命令在实际运用中非常有用,在这篇文档之后的脚本中,几乎没有离开expect,expect几乎可以把你目前可以做的是用全部作完。
在执行一些脚本时,难免会碰到一些人机交互的过程,最常见的就是登陆的过程,对方要求输入用户名密码,通过shell脚本,这一部分可能需要用户本人来实现,而在TCL中使用到expect这个特性,此问题得到解决。
(首先,这篇文档并非一篇详细的关于expect文档,因此只在这简单介绍到expect的部分使用与个人理解)在安装完TCL之后expect是需额外安装的,给人感觉就像个外挂、插件、TCL的扩展,怎么理解都行,因为在此目的是把它用上。