Мне нужен скрипт командной строки, который будет генерировать случайное целое число от 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. Развлекайтесь!