A conclusão dos vários comentários parece ser que a resposta mais simples para a pergunta original é
if ! (( $COUNTER % 5 )) ; then
Aqui está o meu código; Eu quero comparar $COUNTER
para várias vezes.
if [ "$COUNTER" = "5" ]; then
Tudo bem, mas eu quero fazer isso por tempos dinâmicos como 5,10,15,20
etc.
Você pode fazer isso usando o operador aritmético de módulo:
#!/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
Em uso:
$ ./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
Eu também escrevi um loop que pode ser o que você está procurando? Isso irá percorrer cada número de 1 a 600 e verificar se eles são múltiplos de 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
output (encurtado)
$ ./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
Respondendo a pergunta exatamente como está atualmente escrito, desconsiderando o título (que foi editado).
Para comparar um inteiro em uma variável com um número de outros valores inteiros, onde os outros valores são determinados antes do tempo (não está claro o que "dinamicamente" realmente significa na pergunta):
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
Isso também pode ser feito em um loop, é claro,
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
Mas isso torna mais difícil lidar com o caso em que $value
não é encontrado entre os números fornecidos sem usar algum tipo de sinalizador:
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
Ou mais limpo,
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
Eu pessoalmente escolheria a implementação de case ... esac
.
Tags scripting test numeric-data