1

我正在尝试运行一个循环,该循环将通过以下方式在后台运行 matlab 命令:

while [$i -lt $p] || [$i -eq $p] do
     $i>i.txt
     echo "matlab -nojvm -r readtxt_abc;pause(1);myfunc1(a,b,c);clear" |sh &
     let i=i+1
done

我得到一个错误

bash:syntax error near unexpected token 'done'

如果有人知道错误的原因是什么,请告诉我,谢谢!

4

3 回答 3

0
while [ $i -lt $p ] || [ $i -eq $p ]; do
 $i>i.txt
 echo "matlab -nojvm -r readtxt_abc;pause(1);myfunc1(a,b,c);clear" |sh &
 let i=i+1
done

记住这一点[]必须被“空间”包围

于 2012-05-28T08:10:06.737 回答
0

方括号需要围绕它们的空格,因为它们本质上是命令而不是语法元素。当您与 . 放在do同一行时,您还需要一个分号while

while [ $i -lt $p ] || [ $i -eq $p ]; do

小于或等于运算符-le不是进行两次测试。

但是,这在 Bash 中是首选:

while ((i <= p)); do
     # $i>i.txt     # this line doesn't make any sense
     matlab -nojvm -r 'readtxt_abc;pause(1);myfunc1(a,b,c);clear' &    # there's no need to pipe this to sh
     ((i++))
done

但是你可以让 Bash 维护你的计数器变量:

for ((i = 0; i <= p; i++)); do
    . . .
done

也许第二行应该是:

echo "$i" > "$i.txt"

但我不知道你为什么要这样做。

于 2012-05-28T08:11:09.823 回答
-2

我相信你错过了一些尝试:

while [$i -lt $p] || [$i -eq $p]; do
 $i>i.txt;
 echo "matlab -nojvm -r readtxt_abc;pause(1);myfunc1(a,b,c);clear" |sh &;
 let i=i+1;
done
于 2012-05-28T08:08:17.723 回答