необходимо случайное число

необходимо случайное число

Мне нужен скрипт командной строки, который будет генерировать случайное целое число от 1 до 6. Я использую Ubuntu с bash.
Я работал над этим пару месяцев назад, используя 'bc', но так и не добился того, чтобы это заработало полностью. С тех пор я забыл, где я оказался.

Я использую это для изменения скрипта crontab так, чтобы он не всегда запускался каждые 15 минут, а в случайные моменты времени (15+-3 минуты). То есть, изменю crontab так, чтобы он запускался каждые 12 минут, а затем в скрипте перейду в спящий режим на 1-6 минут перед запуском (что по сути является wget для проверки статуса веб-страницы).

решение1

Смотри, мужик, бац,ПАРАМЕТРЫраздел,Переменные оболочкиподраздел:

RANDOM Each time this parameter is referenced, a random integer between
       0 and 32767 is generated.  The sequence of random numbers may be
       initialized by assigning a value to RANDOM.  If RANDOM is unset,
       it loses its special properties, even if it is subsequently
       reset.

Чтобы ограничить значение интервалом 1..6, используйте $((RANDOM%6+1))выражение. 1

Или вы можете использовать /dev/urandomследующее:

tr -dc '1-6' < /dev/urandom | head -c 1

решение2

Я могу предложить пользовательский линейный конгруэнтный случайный генератор или X(n+1) = (343*X(n) ) % M17, где M17= 2^17 - 1 = 131071 - простое число Мерсенна (p=17). Псевдослучайная последовательность равномерно распределена с диапазоном [0,131070], тогда вы можете ограничить диапазон до [1,6[ следующим образом: Z6 = 6*X(n)/M17 + 1

Образец кода:

#!/bin/bash
M=6    #change this if you need different ranges
let "z=(343*10#`date +%N`)%131071"
let "z=$M*z/131071+1"
echo $z

Это одноразовый случайный генератор. Если вам нужна случайная последовательность, то семя 10#date +%Nдолжно использоваться только один раз для начала, а генератор должен использоваться в цикле. Протестировано на Ubuntu 12.04 LTS. Развлекайтесь!

Связанный контент