【问题标题】:how to write a batch file to execute TCL files如何编写批处理文件来执行 TCL 文件
【发布时间】:2013-07-23 03:06:11
【问题描述】:

我是 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

还是谢谢你们:)

【问题讨论】:

  • 问:为什么需要一个单独的(bash?)脚本?为什么不直接用 TCL(它本身就是一种非常好的脚本语言)来做所有事情呢?
  • 我试图在 tcl 文件中编写循环,但它只运行一次(当 $i == 1 时),它没有运行 $i==2~99。
  • 99次问题是一个经典的“栅栏错误”;如果您从 0 开始进行 100 次迭代,请使用 for {set i 0} {$i &lt; 100} {incr i} …,如果您从 1 开始,请使用 for {set i 1} {$i &lt;= 100} {incr i} …注意不同的比较运算符!

标签: batch-file tcl ns2


【解决方案1】:

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

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

你到处都使用大括号。我唯一能想到使用方括号的是数组,但我认为我对 Tcl 的了解不够深,无法确定这一点,而且您的开始条件、测试和下一个命令都在它们自己的大括号中,incr i 相当于 @ 987654323@.

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我首先注意到的是表达式

      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,为什么不呢?

      【讨论】:

        猜你喜欢
        • 2020-01-27
        • 2023-03-08
        • 1970-01-01
        • 2014-09-30
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多