如何编写批处理文件来执行TCL文件

时间:2013-07-23 03:06:11

标签: batch-file tcl ns2

我是Linux的初学者(Ubuntu 12.10)。我想创建一个批处理文件来控制我的TCL文件,我想让我的TCL运行几次。

例如,我希望批处理文件执行以下操作:

for(i=1;i<100;i++){
    sudo ns test.tcl $i
}

我希望我的tcl文件接受参数($ i),以便我可以使用tcl文件中的参数。

谁能告诉我我该怎么办?还是给我一个方向?

提前致谢。

PS。我在我的TCL文件中编写了循环但是失败了。我的代码就像:

for(i=1;i<100;i++){

    set ns [new Simulator]
    .... 
    ....(my NS code)
    ....
    $ns run

}

它只运行$ i == 1,所以我想在tcl脚本之外编写循环。

PS2。大家好,我很抱歉没有表达自己的意见。我确实遵循TCL语法。我的真实代码如下:

for {set i 1} {$i < 100} {incr i} {
    set ns [new Simulator]
    ...
    ...
    ...
    $ns run
}

我通过将我的代码重新安排到以下内容来解决这个问题:

set ns [new Simulator]
for {set i 1} {$i < 100} {incr i} {
    ...
    ...
    ...
}
$ns run

现在它运行了99次。不过我不知道为什么:P

无论如何,谢谢你们。)

3 个答案:

答案 0 :(得分:0)

嗯,你确定你在写Tcl吗?这不是Tcl的语法。您可能正在寻找的是:

for {set i 1} {$i < 100} {incr i} {
    set ns [new Simulator]
    .... 
    ....(my NS code)
    ....
    $ns run
}

你到处都使用大括号。我唯一能想到使用括号的是数组,但我认为我不知道Tcl是否足以确定这一点,你的开始条件,测试和下一个命令都在他们自己的大括号中,incr i是等价的到i++

现在,new不是Tcl中的内置函数。你有一个名为new的过程吗?如果你不这样做,那你就会出错。

答案 1 :(得分:0)

Tcl script非常简单,它由许多命令组成,每个命令都包含一个命令名后跟一些参数。甚至控制结构也是命令。 for命令有4个参数:启动脚本,测试表达式,下一个脚本和正文脚本。像所有其他命令参数(和命令名称)一样,您可以以任何方式引用for的参数,甚至可以为其中一些使用变量和其他替换,但通常在它们之前不需要它们。重新发送到命令,所以你使用大括号:

for {set i 1} {$i < 100} {incr i} {
  # ...
}

答案 2 :(得分:0)

我注意到的第一件事是表达式

for(i=1;i<100;i++){

此循环仅运行99次,除了错误的语法之外,可能不是您想要的。其他人建议使用正确的for循环,所以请继续使用。如果您仍然认为Tcl for循环太复杂,我可以建议一个替代方案:

package require Tclx

loop i 0 100 {
    # i will run from 0 to 99
}

这种方法的唯一缺点是您必须提取Tclx包,但如果您的脚本已使用Tclx,为什么不呢?