TCL和OTCL脚本

原文地址:TCL和OTCL脚本 作者:茉莉molly
NS2的安装之旅告一段落后,开始学习NS2的具体知识了,当然首选的教材就是中文版的《NS与网络模拟》(NS and network simulation)
比较基础,容易上手。其实本人一直认为技术方面的书还是老外写的比较深入和精彩,喜欢啃e文的可以看看《Ns simulator for beginner》.
不足的是关于NS高级编程的书籍却几乎在网上搜不到。
      NS2编程中用到的最主要的语言就是tcl语言和c++语言,为什么要采用两种语言,书中都已经做了说明,互相弥补不足吧。c++方面的书
已经多到瀚如大海的地步了,个人推荐《c++ primer》。而tcl方面的教程可以说少的可怜。虽然教材中也有专门的章节对tcl 0tcl都做了详细
的讲述,可是一些细节部分并没有覆盖到,这里就将我的学习总结一下给大家分享一下。
      首先给大加提供一个tcl的资料网址,个人觉得还是比较不错的,点击后可以直接下载。
       http://hi.netyi.net/files/freebook/tcltk.rar

      首先简要介绍tcl和otcl,它们是一种脚本语言,至于什么是脚本语言,大家自己百度一下就知道了,比如经典的javascript perl 都是
脚本语言,我们用的linux平台本身(bash)就是一个脚本解释器。tcl和otcl的区别也很简单,tcl是普通的面向过程的脚本语言,otcl则是面
向对象的脚本语言。不同的脚本语言需要相应的解释器支持才能运行,这就像java代码必须由java解释器解释,c语言要有c的编译器来编译一
样。tcl和otcl都有各自的解释程序。但是otcl由于扩展了tcl语言,所以otcl的解释器一样可以解释运行tcl编写的脚本。
      tcl和otcl的语法和用法我就不赘述了,上面提到的资料和教材中都介绍的很详细了,想获得更多的信息也可以自己去网上搜一下,tcl
方面的确还是有一些,可惜otcl方面就少了一点。
       至于tcl和otcl的解释器,只要安装了ns2 allinone的压缩包的话,就已经安装了这两个脚本语言的解释shell了(一般解释器被称作壳
shell)。至于如何运行一个tcl脚本,通常是这样一个步骤,首先编写一个后缀名为.tcl的脚本,然后在命令行中敲入 
tclsh 脚本文件路径 
就可以执行脚本了,执行完毕后,系统会将运行结果反应在屏幕上,如果有错误,也会将错误信息返回到屏幕上。tclsh实际上是一个
.exe文件,它的位置在%NS_HOME%/tcl x.x.x/unix目录下(这里%NS_HOME%是你ns的安装目录,tcl后面x.x.x是你安装的tcl的版本号,我的是
8.4.11)。实际上这个路径在你安装完ns的时候已经设在了环境变量path里面了,在行命令中敲入env回车后,将会看到所有的系统环境变量的
内容,找到PATH这一条,可以确认你是否将这个路径加入了PATH变量中了。如果没有,可以在你的.bashrc中的path后面加上。具体方法是,如
果已经在.bashrc中存在了path=....,则在最后的反引号前面先打一个冒号:,然后再加入$NS_HOME/tcl8.4.11/unix就可以了。(前提是你的
NS_HOME已经定义了,否则将$NS_HOME替换为你的ns的完整安装路径)。如果没有path这一条,(估计你NS没安对,还是重新安一下好)直接加
一条export PATH="$NS_HOME/tcl8.4.11/unix"就可以了。这样无论你在什么路径下,都可以方便的用tclsh命令来运行你编好的tcl脚本了,举
个例子比如你在/home/yourid/下,则用以下命令可以编写一个a.tcl脚本
$ cat > a.tcl
puts "helloworld"
(回车后,同时按下ctrl+d)
$ tclsh a.tcl
(回车后,系统将会显示 helloworld)
helloworld
     这个例子只是方便示例用,实际上最好用专门的文本编辑器比如vi, emacs(如果在linux下),或者notepad,editplus,souceinsight这
些专门的编辑器来编写tcl脚本更方便,而不是用 cat命令。
     当你写了一个otcl脚本,比如这样一个脚本 example.tcl
Class MyClass
MyClass myclass
这时,如果你尝试用tclsh example.tcl来执行它时,系统则会提示出错。这是因为tclsh不支持面向对象的tcl语言,它不能识别otcl编写的脚
本。
      其实NS allinone安装包里也提供了otcl的解释程序otclsh,只是通常我们没有把它加入到PATH环境变量中罢了。otclsh的位置在%
NS_HOME%otcl-x.x/目录下。其实你也可以用whereis otclsh(linux下)命令找到这个程序,或者 which otclsh(cygwin环境下,cygwin环境下
不支持whereis命令)命令来找到它。然后向上面提到过的加入PATH环境变量的方法,把它加入PATH中就可以了。然后在命令行中运行 otcl 
example.tcl则会通过编译。
       在写tcl或otcl脚本语言的时候,通常会遇到一些小问题,这里我主要列举两个要注意的细节。这些细节通常是由于tcl编译环境造成的
,主要都是格式问题。
1.在写if for foreach while等命令时通常会跟一个{布尔表达式},但是注意的是if 和{}之间要有一个空格,否则可能会提示出错。
2.tclsh中花括号不能独立成行,比如
if { 表达式1 } 
{
    代码体
}
这样的格式使不能通过编译的,必须写成
if { 表达式1 } {
    代码体
}
这种格式才行。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值