난수 필요

난수 필요

1에서 6 사이의 임의의 정수를 생성하려면 명령줄 스크립트가 필요합니다. 저는 우분투와 배쉬를 사용합니다.
나는 몇 달 전에 이 문제를 해결하기 위해 "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에서 테스트되었습니다. 재미있게 보내세요!

관련 정보