bash変数を比較して5で割ることができることを確認してください。

bash変数を比較して5で割ることができることを確認してください。

$COUNTERここに私のコードがあります。何度も比較したいです。

if [ "$COUNTER" = "5" ]; then

大丈夫ですが、やりたいです。動的5,10,15,20こんな時

答え1

さまざまなコメントの結論は、元の質問に対する最も簡単な答えは次のとおりです。

if ! (( $COUNTER % 5 )) ; then

答え2

モジュロ算術演算子を使用してこれを実行できます。

#!/bin/sh

counter="$1"
remainder=$(( counter % 5 ))
echo "Counter is $counter"
if [ "$remainder" -eq 0 ]; then
    echo 'its a multiple of 5'
else
    echo 'its not a multiple of 5'
fi

使用中:

$ ./modulo.sh 10
Counter is 10
its a multiple of 5
$ ./modulo.sh 12
Counter is 12
its not a multiple of 5
$ ./modulo.sh 300
Counter is 300
its a multiple of 5

私もあなたが探しているループを書いています。その後、1から600までのすべての数字を繰り返し、5の倍数であることを確認します。

ループドア

#!/bin/sh
i=1
while [ "$i" -le 600 ]; do
        remainder=$(( i % 5 ))
        [ "$remainder" -eq 0 ] && echo "$i is a multiple of 5"
        i=$(( i + 1 ))
done

出力(行です)

$ ./loop.sh
5 is a multiple of 5
10 is a multiple of 5
15 is a multiple of 5
20 is a multiple of 5
25 is a multiple of 5
30 is a multiple of 5
...
555 is a multiple of 5
560 is a multiple of 5
565 is a multiple of 5
570 is a multiple of 5
575 is a multiple of 5
580 is a multiple of 5
585 is a multiple of 5
590 is a multiple of 5
595 is a multiple of 5
600 is a multiple of 5

答え3

質問に答える正確に現在作成されているようにタイトル(修正済み)を無視します。

変数の整数を他の整数値と比較します。ここで他の値はあらかじめ決められています(質問で「動的」が実際に何を意味するのかは不明です)。

case "$value" in
    5|10|15|200|400|600)
        echo 'The value is one of those numbers' ;;
    *)
        echo 'The value is not one of those numbers'
esac

もちろん、これはループでも実行できます。

for i in 5 10 15 200 400 600; do
    if [ "$value" -eq "$i" ]; then
        echo 'The value is one of those numbers'
        break
    fi
done

ただし、これによりイベントの処理がより困難で$value困難になります。いいえ一種のフラグを使用せずに、指定された数字内で検索します。

found=0
for i in 5 10 15 200 400 600; do
    if [ "$value" -eq "$i" ]; then
        echo 'The value is one of those numbers'
        found=1
        break
    fi
done

if [ "$found" -eq 0 ]; then
    echo 'The value is not one of those numbers'
fi

またはクリーナー、

found=0
for i in 5 10 15 200 400 600; do
    if [ "$value" -eq "$i" ]; then
        found=1
        break
    fi
done

if [ "$found" -eq 1 ]; then
    echo 'The value is one of those numbers'
else
    echo 'The value is not one of those numbers'
fi

私は自分でcase ... esac実装します。

関連情報