número aleatório necessário

número aleatório necessário

Preciso de um script de linha de comando que gere um número inteiro aleatório entre 1 e 6. Estou usando o Ubuntu com bash.
Eu estava trabalhando nisso há alguns meses usando 'bc', mas nunca consegui que funcionasse completamente. Desde então, esqueci onde cheguei.

Estou usando isso para alterar um script crontab para que ele nem sempre seja executado a cada 15 minutos, mas em horários aleatórios (15+-3 minutos). ou seja. altere o crontab para cada 12 minutos e, em seguida, no script, durma por 1 a 6 minutos antes de executar o script (que é basicamente um wget para verificar o status de uma página da web).

Responder1

Veja cara bater,PARÂMETROSseção,Variáveis ​​de shellsubseção:

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.

Para restringir o valor ao intervalo 1..6 use a $((RANDOM%6+1))expressão. 1

Ou você pode usar /dev/urandomda seguinte forma:

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

Responder2

Posso propor um gerador aleatório congruente linear personalizado ou X(n+1) = (343*X(n) ) % M17 onde, M17= 2^17 - 1 = 131071 é o número primo de Mersenne (p=17). A sequência pseudoaleatória é distribuída uniformemente com um intervalo [0,131070], então você pode limitar o intervalo a [1,6[ da seguinte forma: Z6 = 6*X(n)/M17 + 1

Código de amostra:

#!/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

Este é um gerador aleatório único. Se você precisar de uma sequência aleatória, a semente 10#date +%Ndeverá ser usada apenas uma vez para iniciar e o gerador deverá ser usado em loop. Testado no Ubuntu 12.04 LTS. Divirta-se!

informação relacionada