web-dev-qa-db-ja.com

bash変数を比較して、5で割り切れるかどうかを確認します

これが私のコードです。 $COUNTERをさまざまな回数と比較したい。

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

大丈夫ですが、5,10,15,20などのようにdynamic回実行してほしいです.

4
Mehran Goudarzi

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

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

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

#!/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の倍数であるかどうかを確認します。

loop.sh

#!/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
2
jesse_b

質問に答える正確に現在書かれているとおり、編集されたタイトルは無視されます。

変数内の整数を他の多くの整数値と比較するには、他の値は事前に決定されます(質問で「動的に」が実際に何を意味するかは不明です):

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 is notある種のフラグを使用せずに、指定された数値の中で見つかりました:

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実装。

2
Kusalananda