출처 : http://boom.springnote.com/pages/4186623

Shell Programming 을 하다보면 random값이 필요할 때가 있다. 다음은 Unix 시스템 Shell 에서 random 한 숫자를 가져오는 몇가지 방법들이다.

만약 bash 를 쓴다면 RANDOM 이란 변수로 아주 쉽게 가져 올 수 있다.

echo $RANDOM


요즘 Linux 에서는 대부분 기본은 bash 를 많이 사용하므로 위 방법이 가장 편하면서도 좋은 방법이다. 하지만 개인적으로 괜히 Shell Programming 할때는 기존 /bin/sh 기준으로 짜고 싶은 생각이 든다.

그래서 완전 random 은 아니지만 대체로 쓸 수 있는 방법으로, random 한 값으로 쓰일 수 있는것을 찾아서 쓰는 방법이 있다.
다음은 보통 가장 많이 쓰는 시간을 이용한 밥법이다. nanosecond 를 가져와 이용하는 방법인데 0~999999999 값이 나올 수 있다.

date +%N


혹은 프로세스 아이디를 랜덤한 값으로 쓰는 방법도 있다. Linux 에서는 1~65535 까지의 프로세스 아이디 값을 가질 수 있다. 크지 않는 숫자를 원한다면 이것도 한 방법이다.

echo $$


시 간이나 프로세스 번호를 쓰는 방법은 랜덤성이 크게 중요하지 않고 큰 범위가 필요하지 않는 경우 mod 값으로 가볍게 사용할 수 있는 방법이라 하겠다. 하지만 랜덤성은 많이 떨어질 수 밖에 없다.

비교적 괜찮은 랜덤을 가져오는 방법은 sort 의 -R (random sorting) 옵션을 이용한 방법이다. 대부분 기본으로 있는 명령어로 가져올 수 있는 장점이 있으나 큰범위의 값을 가져올때는 효율이 많이 안 좋은 단점이 있다.

seq 100 | sort -R | head -n1

--> sort 버젼이 낮으면 -R 옵션이 없는 경우도 있다.


만약 /dev/urandom 을 쓸 수 있고 hexdump 명령어가 시스템에 있다면 다음과 같은 방법이 가장 좋으면서도 쉬운 방법이다.

hexdump -n4 -e'"%u\n"' /dev/urandom
난수(랜덤한 숫자 뽑기)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다