Скрипт генерации случайных чисел
var=$RANDOM
создает случайные числа, но как я могу указать диапазон между 0 и 12, например?
6 ответов
если у вас уже есть случайное число, вы можете сказать
var=$RANDOM
var=$[ $var % 13 ]
чтобы получить номера от 0..12
.
Edit:
Если вы хотите произвести числа из $x
to $y
, вы можете легко изменить это:
var=$[ $x + $var % ($y + 1 - $x) ]
между 0 и 12 (в комплекте):
echo $((RANDOM % 13))
редактировать: обратите внимание, что этот метод не является абсолютно верным. Поскольку 32768 не кратно 13, шансы для 0 до 8, которые будут генерироваться, немного выше (0,04%), чем остальные числа (9 до 12).
вот функция оболочки, которая должна давать сбалансированный вывод:
randomNumber()
{
top=32768-$((32768%(+1)))
while true; do
r=$RANDOM
[ r -lt $top ] && break
done
echo $((r%))
}
конечно, что-то лучше должно быть разработано, если более высокое значение диапазона превышает 32767.
альтернатива с помощью shuf, доступная в linux (или coreutils, если быть точным):
var=$(shuf -i0-12 -n1)
в этом документе есть несколько примеров использования этого диапазона и пола, которые могут быть полезны:http://tldp.org/LDP/abs/html/randomvar.html
на FreeBSD и, возможно, других BSDs вы можете использовать:
jot -r 3 0 12
Это позволит создать 3
случайные числа от 0 до 12 включительно.
другой вариант, если вам нужно только одно случайное число на скрипт, вы можете сделать:
var=$(( $$ % 13 ))
Это будет использовать PID скрипта в качестве семени, которое должно быть в основном случайным. Ассортимент снова будет от 0 до 12.