これが私のコードです。 $COUNTER
をさまざまな回数と比較したい。
if [ "$COUNTER" = "5" ]; then
大丈夫ですが、5,10,15,20
などのようにdynamic回実行してほしいです.
さまざまなコメントの結論は、元の質問に対する最も簡単な答えは
if ! (( $COUNTER % 5 )) ; then
これは、モジュロ算術演算子を使用して実行できます。
#!/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
質問に答える正確に現在書かれているとおり、編集されたタイトルは無視されます。
変数内の整数を他の多くの整数値と比較するには、他の値は事前に決定されます(質問で「動的に」が実際に何を意味するかは不明です):
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
実装。