更改TCL文件中的变量值,并使用bash脚本重新运行模拟

时间:2014-09-17 02:33:34

标签: bash tcl

我有来自ns2的TCL文件a.tcl,如下所示:

set opt(x)              1000                                
set opt(y)              1000                                
set opt(z)              15                                  
set opt(per_11ac)       1                                   
set opt(nch)            4                                   
set opt(cbr_rate_DL)        0.05Mb                              
set opt(cbr_rate_UL)        10Mb

我想从bash脚本自动更改opt(cbr_rate_DL)值,因此对于下一个模拟,我可以更改为0.1Mb,0.5Mb和10Mb,并使用新值重新运行模拟。如何在bash脚本中执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用for循环结构来执行此操作

for val in 0.1 0.5 10
do
   sed -i "/set opt(cbr_rate_DL)/ s/[0-9.]\+/$val/" a.tcl
   // run the simulation here
done

上面的sed脚本修改了a.tcl文件inplace(-i)。 它首先搜索/set opt(cbr_rate_DL)/的每一行。如果行包含set opt(cbr_rate_DL),如果是,则用点s/[0-9.]\+/$val/替换数字序列,其值为$val

答案 1 :(得分:1)

执行此操作的最佳方法可能是使用环境变量传递值。在Tcl脚本中,环境变量被映射到全局env数组,因此您将代码更改为包含use(为了清晰起见,使用额外的空格和注释):

# Set up a default, for safety
set opt(cbr_rate_DL)        0.05Mb

# Has the environment variable been set?
if {[info exists env(CBR_RATE_DL)]} {

    # It has! Copy to where it belongs
    set opt(cbr_rate_DL)    $env(CBR_RATE_DL)
}

然后,只需将CBR_RATE_DL环境变量设置为您想要的任何值,即可在其中运行其他值。 (当然,如果你正在使用一个由bourne-shell派生的环境,请记住从你的shell export。)