在shell中将变量从MATLAB解析为Linux,反之亦然

时间:2012-08-24 15:04:05

标签: bash matlab shell parsing

我遇到了一个问题。我必须在linux上使用MATLAB。 我需要将数据从MATLAB解析到Linux,反之亦然。

例如

这一切都在写作

basic.sh

this basic.sh has to be opened in MATLAB

 s=3     # is defined is MATLAB
##########################


for (( p=1 ; p<5; p++ ))     # from here starts the loop in Linux
do                                # is a command from Linux
echo "$p"                         # is a command from Linux
add= $p+s                         # should calulate in linux , is a command from Linux
add=add/5                         # should do in MATLAB 
done     

#########################
 add                              # should OUTPUT the value of add as there is no semicolumn in MATLAB 

请建议我这样一个小例子的可能方法,其余的我会自己扩展它。

最好的问候

1 个答案:

答案 0 :(得分:2)

好吧,你可以从一个终端调用Matlab,并运行一个命令:

$ matlab -nodesktop -nojvm -nosplash -r <YOUR_COMMAND>

其中<YOUR_COMMAND>可以是m脚本/函数。可以将其输出重定向到shellscripts,

$ matlab -nodesktop -nojvm -nosplash -r <YOUR_COMMAND> | ./basic.sh

(您的脚本应该能够处理管道),或者整个命令可以嵌入到shell脚本中,

#!/bin/bash

s=$(matlab -nodesktop -nojvm -nosplash -r <FUNCTION_GENERATING_S>)

<code generating $add>

result=$(matlab -nodesktop -nojvm -nosplash -r <SOME_FUNCTION($add)>)

您当然也可以使用文件作为内存。 Matlab部分:

s=3;      

fid = fopen('TMP.txt','w');
fprintf(fid, s);
fclose(fid);

!./basic.sh

fid = fopen('TMP.txt','r');
add = fscanf(fid, '%f');
fclose(fid);

Shell脚本:

#!/bin/bash

s=$(cat TMP.txt)
for (( p=1; p<5; p++ ))     
do                            
    echo "$p" 
    add=$(($p+$s))
    add=add/5                      
done

echo $add > TMP.txt

这样做的好处是Matlab和shell脚本之间存在严格的分离,只有一个m文件就足够了。

当然,无论你选择哪种方式 - 你为什么要首先这样做? Matlab可以完成bash所能提供的大部分功能,并且也可以独立于平台(因此,如果你切换到MS Windows,它仍然有效)......那么你能澄清一下吗?