穿插在python, R, matlab, C++, shell 的后果就是各种跨平台调用。。。之前总结过python调用matlab,见http://www.cnblogs.com/hxvicky/p/4646044.html
现在需要matlab调用shell,只需要system(‘xxx’)既可。
举个栗子,传参pid=[1 2 3], value=[3.2 2.7 9.9]给run-model.sh,执行脚本并得到输出结果(这里偷懒了,将输出保存到文件,再读文件得到输出结果=。=)
<pre>
p=num2str(pid(1));
for k=2:length(pid)
p=[p,’,’,num2str(pid(k))]; %%转换为,分割的字符串
end
v=num2str(value(1));
for k=2:length(value)
v=[v,’,’,num2str(value(k))]; %%转换为,分割的字符串
end
system([‘./run-model.sh ‘,p,’ ‘,v,’ &> log_opti’]);
mcpi=load(mcpi_path);
</pre>
run-model.sh文件
<pre>
!/bin/csh
set paras=”cldfrc_rhminl:cldfrc_rhminh:zmconv_c0_lnd:zmconv_c0_ocn:zmconv_ke”
set paraId=$1 %%得到参数p
set paraValue=$2 %%得到参数v
set l = echo $paraId | awk -v RS=',' 'END{print NR}'
foreach j (seq 1 $l
)
set pid=echo $paraId | cut -d ',' -f $j
%%按,分割取参
set para=echo $paras | cut -d ':' -f $pid
set var=echo $paraValue | cut -d ',' -f $j
set para_val=”$para = $var”
echo $para_val
sed -i “/<$para>/c \ $para_val” atm_in
end
</pre>