bashスクリプトのwhileループ

bashスクリプトのwhileループ

私のコードは次のとおりです

#!/bin/bash

while true; do

    COUNTER=$((COUNTER +1))     
    echo $COUNTER

    if (($COUNTER%3 == 0));  then
        echo "Counter now is 3"
        sleep 2
    fi

    if (($COUNTER%6 == 0));  then
        echo "Counter now is 6"
        sleep 2
    fi

    if (($COUNTER%9 == 0));  then
        echo "Counter now is 9"
        sleep 2
    fi

    if (($COUNTER%12 == 0));  then
        echo "Counter now is 12"
        sleep 2
    fi

    if (($COUNTER%15 == 0));  then
        echo "Counter now is 15"
        sleep 2
        exit
    fi

done

私の結果は次のとおりです

./test2.sh 
1
2
3
Counter now is 3
4
5
6
Counter now is 3
Counter now is 6
7
8
9
Counter now is 3
Counter now is 9
10
11
12
Counter now is 3
Counter now is 6
Counter now is 12
13
14
15
Counter now is 3
Counter now is 15

Counter now is 3なぜ毎回または時々より多く表示されるのですかecho?追加のコンテンツを表示したくありません。echo

答え1

そのテストでテストした内容が出力に指定されている場合は、より正確になります。

if (( COUNTER%3 == 0 )); then
    echo 'COUNTER is a multiple of 3'
fi

ここにテストがあります。考えてみると、6、9、12、15も3の倍数です。

この短いスクリプトでは、カウンタの実際の値がいくつかの値の倍数であることを確認するには、onの代わりにCOUNTER直接テストすることをお勧めします。COUNTER%somevalue

if (( COUNTER == 3 )); then
    echo 'COUNTER is 3'
fi

$変数が算術コンテキストで使用される場合、変数は必要ありません。

答え2

結果が偽だからです。

  • 「数は…」と言うと出力は何ですか?
  • 「Count is」より良い言葉がありますか?
  • どこでecho計算されますか? (計算することはecho...)

この問題を解決したら、問題が何であるかを理解する必要があります。

関連情報