我正在尝试运行一个循环,它将在后台以下列方式运行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'
如果有人知道错误的原因是什么,请告诉我,谢谢你!
答案 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