임의의 숫자가 필요함

임의의 숫자가 필요함

1에서 6 사이의 임의의 정수를 생성하는 명령줄 스크립트가 필요합니다. 저는 bash와 함께 Ubuntu를 사용하고 있습니다.
나는 몇 달 전에 '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에서 테스트되었습니다. 재미있게 보내세요!

관련 정보