我是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
无论如何,谢谢你们。)
答案 0 :(得分:0)
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
,为什么不呢?