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、2 つのテストを行う代わりに使用されます。

ただし、これは 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

おそらく 2 行目は次のようになります。

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 に答える