tcl脚本

合集下载

tcl脚本语言介绍

tcl脚本语言介绍
实现执行 set b "hello" 并用其结果来替换源命令
中的方括号部分,产生一条新命令
set a "hello" //"hello" 为 set b "hello" 的返
//回值
最终的结果是b="hello" a="hello"
当命令的一个子域以方括号开始以方括号结束,表示要进行一个命令子替换。并执行该子命令,用其结果来替换原命令中的方括号部分。方括号中的部分都被视为Tcl命令。
Variables: scalars and arrays 变量:标量和向量(即数组)
向量就是数组,而标量是没有下表的变量。
我们用C来类比:
int i; // i 是标量
int j[10]; // j 是向量
变量不需要定义,使用的时候会自动的被创建。Tcl支持两种
变量:标量和向量
举个例子来说明吧,
Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以释运行,其强大的功能和简单精妙的语法会使你感到由衷的喜悦,这片文章对 Tcl有很好的描述和说明。如果你看起来很吃力,那是因为 Tcl与一般的语言有一些不同之处,刚开始可能有一些不理解,但很快就会掌握的。请坚持一下,我能坚持写完,你至少也应该坚持读一遍吧!
这里有一个初学者不注意的地方,上述的定义一定要写成那样子。而不能向下面那样写:
proc pf {str}
{
puts $str
}
因为proc实际上也只不过是一条命令,是一换行符或分号来结束的,用集群参数来传递函数体。proc的定义如下:
proc name args tclcommand

TCL脚本入门教程

TCL脚本入门教程

TCL脚本入门教程```puts "Hello, TCL!" ;# 输出 Hello, TCL!set name "John" ;# 定义一个变量 nameputs "My name is $name." ;# 输出 My name is John.```在这个例子中,第一行的`puts`命令用于输出文本到控制台,第二行的`set`命令用于定义一个变量,第三行的`puts`命令输出带有变量的文本。

在TCL中,变量需要以`$`开头。

- `set`:用于定义和修改变量的值。

- `if`:用于条件判断,根据条件执行不同的代码块。

- `for`:用于循环执行代码块一定的次数。

- `while`:用于在条件满足的情况下循环执行代码块。

- `proc`:用于定义和调用过程(函数)。

- `expr`:用于进行数学运算和表达式求值。

```set age 25set height 1.75set name "Tom"puts "My age is $age."puts "My height is $height meters."puts "My name is [string toupper $name]."```这个例子中,`set`命令用于定义三个变量,`puts`命令用于输出带有变量的文本。

`string toupper`是TCL中的字符串处理命令,用于将字符串转换为大写。

```set file [open "example.txt" r]set content [read $file]close $fileputs $content```这个例子中,`open`命令用于打开一个文件,`read`命令用于读取文件内容,`close`命令用于关闭文件。

Tcl脚本测试入门

Tcl脚本测试入门

Tcl脚本测试入门Tcl简介Tcl是一种非常简单的编程语言,如果你以前曾经学过编程,那么你只要学习几个小时就可以编写出一些有趣的Tcl程序。

本文将对Tcl的功能做一个大概的介绍。

一般来说,读完本文之后,你就可以开始独立的编写一些简单的Tcl 脚本了;不过,要想获得更全面的认识,我们建议你还是去参考几本目前已经出版的 Tcl书籍。

基本语法Tcl脚本由一些被换行符或是分号分开的命令所组成。

命令都有相同的基本格式,如下面的例子所示:expr 20 + 10该命令计算20加10的和,并返回结果30。

你可以把这个例子以及本文中的所有其它的例子键入到tclsh这样的Tcl应用程序中来验证它们;在一个命令结束后,tclsh将打印出它的结果。

每个Tcl命令都含有一个或多个被空格分开的单词,在这个例子中有4个单词:expr,20,+,和10。

第一个单词是一个命令名,其余的单词是这个命令的参数。

所有的Tcl命令都含有一些单词,但不同的命令对他们的参数有不同的处理方式。

expr命令把它的所有参数看作是一个算术表达式,计算表达式的结果,并以字符串的形式返回结果。

在expr命令中,单词之间的分隔不是很重要:同样的命令你可以写成这种形式:expr 20+10不过,对大部分的命令来说,单词的结构是很重要的。

每个单词都会用于不同的目的。

所有的Tcl命令都返回结果。

如果一个命令产生了没有意义的结果,那么它将返回一个空字符串作为它的结果。

变量Tcl允许你在变量中保存数值,并且可以在后续的命令中使用这些数值。

set命令用于对变量进行读写操作。

比如,下面的命令对变量x赋值为32。

set x 32这个命令返回变量的新值。

你可以让set只带一个参数来读出变量的数值:set x你不需要在Tcl中声明变量:变量在第一次set的时候被自动创建。

Tcl变量没有类型:任何值可以赋给任何变量。

要想在一个命令中使用变量的值,可以采用变量替代,如下例所示:expr $x*3当一个字符$出现在一个命令中的时候,Tcl把跟在它后面的字母和数字看作是一个变量名并且将其替换成变量的值。

TCL脚本语言-9-过程和变量

TCL脚本语言-9-过程和变量

过程和变量前面的章节中我们对过程和变量已经有了较多的接触了,还定义了一些自己的过程,并且对列表和数组等有了深入的了解。

本章节中我们将系统的深入了解TCL中的过程和变量相关的知识。

首先从过程定义开始。

定义过程TCL中,“过程”和“函数”没有差别,这一点和C语言类似。

在这本书当中,TCL的“过程”和“函数”是两个完全等价,可以互相替换的概念和术语。

TCL定义任何过程的语法如下:proc name arglist bodyproc是标准的TCL核心命令之一,用来定义一个过程。

它带有三个参数:过程名字、过程的参数列表以及过程体。

1.过程名字可以是任意的字符串。

当然了,本着易读和可维护性的原则,我们建议按照C语言语法惯例来命名。

如果你喜欢中文,也可以给你定义的过程一个中文名字。

如果定义的过程已经存在了,那么新定义的过程会替换掉原来的定义,这一点和C不同。

在C中,函数是不能够被重复定义的。

2.参数列表用来声明本过程的调用参数形式,它应该是一个TCL列表。

列表的每一个元素就是一个过程的形式参数。

当然列表可以为空,表示本过程不需要参数。

3.过程体是一块TCL脚本,当本过程被调用的时候,就执行该脚本。

4.过程返回值可以直接在body中调用return来返回,如果没有执行return就返回,那么body中最后被执行的那条命令的返回值就是过程的返回值。

TCL中的过程支持递归,包括直接递归和间接递归。

下面我们定义一个阶乘函数:proc Factorial {n} {if {$n==1} {return 1}return [expr {$n * [Factorial [expr $n-1]] }] ;#递归调用}puts [Factorial 4]其中Factorial是过程名;{n}是参数列表,只有一个元素,表示过程Factorial只有一个参数;过程内部通过递归调用来计算参数n的阶乘。

全局、局部TCL中的变量也有作用范围之说。

TCL脚本技术及用法

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解释器当作特殊符号 对待的字符。置换可以嵌套。

synopsy的Tcl脚本语言学习笔记

synopsy的Tcl脚本语言学习笔记

TCL脚本语言学习(1)当输入的命令较长时,可以使用反斜线 \ 将一行命令分割为几行,例如:set target_library \/home/fzz/synopsys/library/slow.db上面的命令等价于set target_library /home/fzz/synopsys/library/slow.db(2)缩略语命令:Synopsys的命令可以缩略到非含糊的形式,但是在脚本文件中应该少使用缩略命令,因为脚本文件在某些Synopsys的工具或者TCL中的命令易于发生变化,这种变化因为缩略而变得含糊。

(3)可以使用Synopsys中的“history”命令列举或者执行出先前使用过所有命令,例如:dc_shell> history info 5该命令将列举出最近执行过的5跳指令dc_shell> history redo 4该命令将执行在当前 dc_shell中执行过的命令中的第4条指令,这里面redo 后面的数据如不是有效的,则将重复执行最后输入的命令。

例如dc_shell> history redo -4, -4 无效,将重复执行最后输入的有效指令也可以采用快捷键的方式,输入“!!”命令,重新执行命令。

例如:dc_shell> !!set target_library /home/fzz/synopsys/library/slow.db/home/fzz/synopsys/library/slow.db能够重复执行某条指令可以使用Dc_shell> !5(4)以命令行方式获得help使用-help 命令获得帮助Dc_shell> echo –help同样可以使用for命令获得help的所有命令,输入方式如下:dc_shell> help for*也可以获得特殊的命令组的所有命令的列表,通过输入命令集合的名字,例如:dc_shell> help procedures使用man命令也可以使用man命令获取Synopsys中获得帮助的相应命令,例如:dc_shell > man query_objects(5)Command Status命令状态时命令返回值,所有的命令都返回一个一个字符串或者 null,默认时命令状态值返回控制窗口,例如:dc_shell >set total_cells 0 ,这里定义了一个新的变量dc_shell >incr total_cells(6)Quoting 引用使用quoting disable一些特殊字符的含义(例如:[],$ and ;)dc_shell> set a 5; set b 1010dc_shell> echo {[expr $b - $a]} evaluates to [expr $b - $a][expr $b - $a] evaluates to 5双引号标示特殊的较弱的quoting,使用举例如下:dc_shell> Set A 10; set B 44dc_shell> ech o “A is $A; B is $B.\nNet is [expr $A - $B].”chapter 2 Tcl基础Variables变量dc_shell> set buf_name 1si_10K/B1I1si_10K/B1Idc_shell> set a 11dc_shell> set b 2.5Tcl中所有的变量都是字符串,Tcl不识别变量是整数或者实数的变量dc_shell> set b 1010dc_shell> incr b11dc_shell> incr b -65Incr的默认增加值是1,如果增加的不是整数值,那么则会报错,例如:dc_shell> set b 2.42.4dc_shell> incr bError …为了查找一个变量是否存在,可以使用tcl的info exists命令,例如说,为了查看变量total_cells是否存在,键入:dc_shell> info exists total_cells如果变量存在,则info exists返回1,否则,返回0。

TCL脚本实例+检查IP的脚本源码

TCL脚本实例+检查IP的脚本源码
set result "# OK"
}
set tmpStr [format "%-30s%s" [string trimright $ipStr] $result]
setProfile $ipListFile $block $ipKey $tmpStr
}
}
if {[llength $pingSuccess] >= 1} {
10.50.86.25
10.50.86.28
10.50.86.31
10.50.86.32
10.50.86.35
10.50.86.36
10.50.53.22
10.56.90.100
10.56.90.101
10.50.86.10
10.50.86.11
10.50.86.12
10.50.86.13
10.50.86.18
Totally 17 ping successfully as below:
10.50.100.51
10.50.100.52
10.50.100.55
10.50.100.56
10.50.100.58
10.50.100.59
10.50.100.60
10.50.100.61
10.50.100.62
10.50.100.63
puts "\n==============================================================================\
\nTotally [llength $pingSuccess] ping successfully as below:"

TCL脚本基本语法

TCL脚本基本语法

TCL基本语法1语言简介TCL缩短工具命令语言的形式。

由加州大学伯克利分校的约翰Ousterhout设计它。

它是一种脚本语言,由其自身的解释器,它被嵌入到开发应用程序的组合。

TCL最初在Unix平台中。

后来移植到Windows,DOS,OS/2和Mac OSX。

TCL非常类似于其他UNIX的shell语言,类似Bourne Shell (Sh), the C Shell (csh), the Korn Shell (sh), 和Perl。

它的目的是提供程序与其他程序,也是作为一个可嵌入的翻译相互作用的能力。

虽然原来的目的是为了使程序能够进行交互,可以找到由Tcl/Tk 编写的完全成熟的应用。

1.1TCL特性TCL的特点如下:1、减少开发时间。

2、功能强大和简单的用户界面工具包整合传统知识。

3、一次编写,随处运行。

它可以运行在Windows,Mac OS X和几乎所有的Unix平台。

4、有经验的程序员很容易上手,因为语言就是这么简单,可以在几个小时或几天学习Tcl就可以搞定。

5、可以轻松地用Tcl扩展现有的应用程序。

另外,也可以包括Tcl的用C,C++或Java 来扩展Tcl,或反之亦然。

6、有一组功能强大的网络功能。

7、最后,它的开源,免费的,可以用于其他无任何限制商业应用。

2基本语法2.1命令结构commandName空格arguments。

每条命令之间通过换行或者;隔开。

例如:#设置变量foo为0set foo 0set bar 1;puts $bar; #设置(set 为一个Tcl命令)变量bar为1,输出(puts也是一个Tcl命令)bar2.2注释使用#注释,不过要注意的是下面的注释是错误的:set foo 0 #设置变量foo为0,这种注释是错误的因为tcl解析器总是认为一条命令应该以换行或者分号结束,其他的在同一行中都认为是参数。

所以正确的应该是:set foo 0#设置变量foo为0,这种注释是正确的set foo 0; #设置变量foo为0,这种注释是正确的3变量定义及基本操作tcl可以定义两种类型的变量:变量和数组。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#无线节点参数
set val(chan) Channel/WirelessChannel ;#无线信道
set val(prop) Propagation/TwoRayGround ;#无线传输模型是TwoRayGround set val(netif) Phy/WirelessPhy ;#网络接口类型是无线物理层
set val(mac) Mac/802_11 ;#MAC层协议采用802.11
set val(ifq) Queue/DropTail/PriQueue ;#接口队列类型是IFQ队列
set val(ll) LL ;#逻辑链路层类型LL层
set val(ant) Antenna/OmniAntenna ;#天线类型是全向天线
set val(ifqlen) 50 ;#网络接口队列的大小是50
set val(rp) AODV ;#无线路由协议是AODV协议set val(x) 600 ;#设定拓扑范围——长度,600m set val(y) 200 ;#设定拓扑范围——宽度,200m set val(stop) 10.0 ;#设定模拟时间,10s
set val(nn) 3 ;#节点数,3个
#建立一个模拟实例
set ns [new Simulator]
#开启Trace跟踪文件和NAM显示文件
set tracefd [open wireless.tr w]
set namtrace [open wireless.nam w]
$ns trace-all $tracefd
$ns namtrace-all-wireless $namtrace $val(x) $val(y)
#建立一个拓扑对象,记录节点的移动情况
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
#创建God(General Operations Diretor)对象,存储网络状态以及节点间连接信息
create-god $val(nn)
#创建物理信道对象
set chan_1_ [new $val(chan)]
#配置无线节点(包括使用何种路由协议,何种MAC协议,无线信道模型等)
$ns node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \
-channel $chan_1_ \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace ON \
-movementTrace OFF
#建立无线节点并设置节点的位置(节点位置决定了拓扑结构)
set n(0) [$ns node]
$n(0) random-motion 0
$n(0) set X_ 100.0
$n(0) set Y_ 100.0
$n(0) set Z_ 0.0
$ns initial_node_pos $n(0) 60
set n(1) [$ns node]
$n(1) random-motion 0
$n(1) set X_ 300.0
$n(1) set Y_ 100.0
$n(1) set Z_ 0.0
$ns initial_node_pos $n(1) 60
set n(2) [$ns node]
$n(2) random-motion 0
$n(2) set X_ 500.0
$n(2) set Y_ 100.0
$n(2) set Z_ 0.0
$ns initial_node_pos $n(2) 60
#建立UDP代理
set udp0 [new Agent/UDP] ;#建立一个UDP发送代理
$ns attach-agent $n(0) $udp0 ;#将UDP发送代理绑定到节点0
set null0 [new Agent/Null] ;#建立一个UDP接收代理
$ns attach-agent $n(2) $null0 ;#将UDP接收代理绑定到节点2
$ns connect $udp0 $null0 ;#连接UDP发送代理和接收代理
#在UDP代理上建立CBR流
set cbr0 [new Application/Traffic/CBR] ;#建立一个CBR流应用
$cbr0 attach-agent $udp0 ;#将CBR流应用绑定到UDP发送代理
#仿真结束时重置节点
for {set i 0} {$i < 3} {incr i} {
$ns at 10.0 "$n($i) reset";
}
#启动和结束代理
$ns at 0.5 "$cbr0 start"
$ns at 9.5 "$cbr0 stop"
#定义结束过程,关闭Trace文件和NAM显示文件,模拟结束时调用proc finish {} {
global ns tracefd namtrace
$ns flush-trace
close $tracefd
close $namtrace
exit 0
}
#模拟结束时调用结束过程
$ns at $val(stop) "finish"
$ns at $val(stop) "puts \"NS EXISTING...\"; $ns halt"
puts "Start simulation..."
#执行模拟
$ns run。

相关文档
最新文档