1

テストする条件があります。変数 A を変数 B に等しくしたいのですが、A が B に等しくなる前に、数回のテストを立て続けに行う必要があるかもしれません。ただし、10 回以上は試行したくありません。

A=1
B=2

while [ $A != $B ]
do
  echo "hi there"
done

したがって、A が B と等しくならない限りループし続けることは明らかです。A が B と等しくならない場合に備えて、試行回数を制限したいと考えています。私は次のようなことを考えていました:

A=1
B=2

COUNT=0
while [ "$COUNT" -le 10 ]
do
    while [ $A != $B ]
    do
      echo "hi there"
      COUNT=`expr $COUNT + 1`
    done

done

ここで同様の質問への回答を見つけましたが、これとは異なります。ありがとう!

4

2 に答える 2

0

while(および他の多くの複合コマンド) は、合法的にネストできます。あなたの論理は、あなたが達成しようとしていることに対して完全に正しくありません。

n=
while [[ $a != "$b" && ++n -le 10 ]]; do
    echo 'hi there'
done

純粋な数値比較用で[あり[[、Bash では使用しないでください。

for (( n = 0; a != b && ++n <= 10; )); do
    ...

多くの可能性があります。余談exprですが、古代の非 POSIX Bourne シェルとの互換性が必要でない限り、またはバッククォートを使用しないでください。

于 2013-02-18T21:54:23.840 に答える
0
A=1
B=2

COUNT=0
while [ "$COUNT" -le 10 ] || [ $A != $B ]
do
  echo "hi there"
  COUNT=`expr $COUNT + 1`
done

私が正しく理解していれば、あまりにも多くのループを実行したくはありませんが、1 つのループで 2 つのブレーク条件を使用する必要があります。

于 2013-02-18T21:39:49.860 に答える