0

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

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

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

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

谁能告诉我我能做什么?或者给我一个方向?

提前致谢。

附言。我在我的 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

无论如何谢谢你们:)

4

3 回答 3

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某处命名的过程吗?如果你不这样做,那么你会得到错误。

于 2013-07-23T04:20:31.330 回答
0

Tcl 脚本非常简单,它由许多命令组成,每个命令由一个命令名和一些参数组成。甚至控制结构也是命令。for命令有4 个参数:一个开始脚本、一个测试表达式、一个下一个脚本和一个正文脚本。像所有其他命令参数(和命令名称)一样,您可以for以任何方式引用 的参数,甚至可以使用变量和其他替换其中的一些,但通常在将它们发送到命令之前您不希望这样做,所以你使用大括号:

for {set i 1} {$i < 100} {incr i} {
  # ...
}
于 2013-07-23T04:20:48.157 回答
0

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

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

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

package require Tclx

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

这种方法的唯一缺点是你必须拉入Tclx包,但如果你的脚本已经使用了Tclx,为什么不呢?

于 2013-07-23T16:37:22.373 回答