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/urandom
da 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 +%N
deverá ser usada apenas uma vez para iniciar e o gerador deverá ser usado em loop. Testado no Ubuntu 12.04 LTS. Divirta-se!