博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCl介绍
阅读量:6096 次
发布时间:2019-06-20

本文共 3132 字,大约阅读时间需要 10 分钟。

  hot3.png

TCL (Tool Command Language)在ns2中主要是用来描述脚本的,简单的说就是用来描述要仿真的网络环境和参数设定等。在练习底下的范例时,先把程序代码存放到档案内,然后使用ns去执行即可(ns也具有tcl interpreter的功能)。

Tcl只支持一种数据结构:字符串(string),所有的参数、命令的结果以及所有的变量都是字符串。字符串有三种形式:命令(command),表达式(experesion),列表(list)。一个参数可以由 “  ” 双引号来表示,命令的子域可由 [  ] 方括号进行命令子替代。

注释和shell很相像,第一个字母是 # 的tcl字符串是注释,用 $ 进行变量替换,即变量的引用。

[变量(variable)和变量替换(variable substituion)]

Example 1:

        set foo “john”

        puts “my name is $foo”

说明:

        程序第一行:把”john”这个字符串指派给变量foo。程序的第二行:使用puts这个指令把后面的字符串秀出来,而在秀出来之前,会先把$foo先取代成john,所以真正被秀出来的字符串是my name is john。

[表示式(expressions)]

Example 2:

       set value [expr 0==1]
       puts $value

说明:

在范例中使用了expr去判断0是否等于1,结果是假,所以把0存到value这个变量中,最后并把结果秀出来。

[指令替换(command substitution)]

       就如同变量替换一样,指令替换可以把”原tcl script执行结果”取代”原tcl script”。

Example 3:

puts "I am [expr 10 * 2] years old, and my I.Q. is [expr 100 - 25]"

说明:

       在范例中,square bracket(也就是[])可以用来达成指令替换,所以在执行此行tcl script时,会先去执行[expr 10*2]和[expr 100-25]并把结果20和75取代原本tcl script中[expr 10*2]和[expr 100-25]的位置,最后在使用puts把此字符串秀出来。

[流程控制(control flow)]

       跟其它的程序相同,TCL也提功了一些方法可以用来控制程序运作的流程,这包含了if-else、switch、while、for、foreach等指令,这些指令用来请参考下面范例。

Example 4:

set my_planet "earth"

    if {$my_planet == "earth"} {

        puts "I feel right at home."

    } elseif {$my_planet == "venus"} {

        puts "This is not my home."

    } else {

        puts "I am neither from Earth, nor from Venus."

    }

    set temp 95

    if {$temp < 80} {

        puts "It's a little chilly."

    } else {

        puts "Warm enough for me."

}

[程序(procedures)]

       在TCL中也允许使用者去自定程序,定义程序基本的语法为: proc name params body,其中name为程序的名称,params是参数列表,body则是程序的主体。定义完程序后就可以像任何其它的tcl指令一样执行。

Example 5:

proc sum_proc {a b} {

    return [expr $a + $b]

}

proc magnitude {num} {

    if {$num > 0} {

        return $num

    }

    set num [expr $num * (-1)]

    return $num

}

set num1 12

set num2 14

set sum [sum_proc $num1 $num2]

puts "The sum is $sum"

puts "The magnitude of 3 is [magnitude 3]"

puts "The magnitude of -2 is [magnitude -2]"

说明:

       在程序中定义了两个程序sum_proc和magnitude,sum_proc有两个输入参数a和b,这个程序最主要的工作就是把a和b相加,并把结果回传,另外一个程序magnitude只有一个参数num,这个程序最主要就是去判断num是否是正数或负数,若是正数则直接回传,若是负数就先与-1相乘,再回传,简单的说magnitude就是在做绝对值。

[数组(arrays)]

Example 6:

set myarray(0) "Zero"

set myarray(1) "One"

set myarray(2) "Two"

for {set i 0} {$i < 3} {incr i 1} {

                           puts $myarray($i)

}

说明:

       程序一开始定义了一个数组,名称为myarray,共有三个元素(element),第一个为”Zero”,存放在数组中0的位置;第一个为”One”,存放在数组中1的位置,第一个为”Two”,存放在数组中2的位置,程序最后是把数组每个元素都秀出来。

[字符串(strings)]

Example 7:

    set str "This is a string"
    puts "The string is: $str"
    puts "The length of the string is: [string length $str]"
    puts "The character at index 3 is: [string index $str 3]"
puts "The characters from index 4 through 8 are: [string range $str 4 8]"
    puts "The index of the first occurrence of letter \"i\" is: [string first i $str]"

说明:

        范例中的string length $str]可以用来显示字符串长度,[string index $str 3]可以用来显示字符串中的第四个字母为何(第一个字母的index为0),[string range $str 4 8]可以用显示从字符串中第五个到第九个的字母,[string first i $str]可以用来显示字母i在字符串中第一次出现时的index值,也就是第一次出现时在第(index+1)个位置。

[输出(output)]

Example 8:

     set f [open "/tmp/myfile" "w"]

puts $f "We live in Texas. It's already 110 degrees out here."

puts $f "456"

close $f

说明:

        一般来说,puts若是没有指定输出装置的话,内定的输出装置是屏幕,但此范例中有指定输出的装置为档案,所以会把要秀出的字符串写入档案内。

转载于:https://my.oschina.net/dalu/blog/90727

你可能感兴趣的文章
品友互动受邀2018商汤人工智能峰会
查看>>
企业级java springboot b2bc商城系统开源源码二次开发-hystrix参数详解(八)
查看>>
java B2B2C 多租户电子商城系统- 整合企业架构的技术点
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
mysql的innodb中事务日志(redo log)ib_logfile
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
工作流引擎添新丁:Flowable6.0发布
查看>>
Visual C++ 2012入门经典(第6版)
查看>>
我的友情链接
查看>>
shell 更改文件后缀-字符串操作
查看>>
L2TPV3--静态
查看>>
我的友情链接
查看>>
mysql复制
查看>>