Uma técnica muito frequente para gerar números aleatórios dentro do intervalo específico é tomar um inteiro aleatório e calcular o resto da divisão entre o número inteiro e a diferença dos limites do intervalo. A ideia básica é que o restante só pode ser de 0 para divisor, então obtemos isso e então compensamos o valor resultante pelo limite baixo. Eu usei essa técnica várias vezes ao escrever código em C.
Naturalmente, essa questão é marcada com scripts
e é possível implementar a mesma técnica em bash
. Podemos usar o gerador da variável $RANDOM
e, em seguida, obter o inteiro no intervalo desejado usando a calculadora bc
. O script abaixo faz exatamente isso:
#!/usr/bin/env bash
get_random_int(){
echo "$low + $RANDOM % ( $high - $low + 1 )" | bc
}
main(){
local howmany=$1
local low=$2
local high=$3
local counter=0
while [ $counter -lt $howmany ]
do
get_random_int
counter=$(($counter+1))
done
}
main "$@"
Uso básico:
$ ./random_in_range.sh 3 100 200
184
110
179
O primeiro argumento é quantos inteiros você quer, o segundo é o limite baixo, e o terceiro argumento é o limite superior.