while循环BASH中的语法错误

时间:2012-05-28 08:05:34

标签: bash background while-loop syntax-error

我正在尝试运行一个循环,它将在后台以下列方式运行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'

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

3 个答案:

答案 0 :(得分: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

请记住,[]必须被“空格”

包围

答案 1 :(得分: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"

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

答案 2 :(得分:-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