[Linux 셸 스크립트] bash - 132 정수값으로 난수 얻기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] bash - 132 정수값으로 난수 얻기

by 찬찬이 아빠 2021. 7. 13.
반응형
  1. 사용 명령어

(1) nc

(2) echo

(3) sleep

 

 

  2. 키워드 & 사용처

(1) 키워드

난수, 정수

 

(2) 사용처

외부 명령어를 사용하지 않고 셸 스크립트만으로 난수를 얻고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./bash-random.sh
Connection to 192.168.2.1 80 port [tcp/http] succeeded!
Wait: 4 sec.
Connection to 192.168.2.1 80 port [tcp/http] succeeded!

 

 

  4. 스크립트

#!/bin/bash

 

# 접속 정보 정의

ipaddr="192.168.2.1"         

port=80               

 

# 1에서 10까지의 정수값 난수를 RANDOM 변수에서 얻기

waittime=$((RANDOM % 10 + 1))           

 

# 테스트 명령어를 sleep하며 2회 실행

nc -w 5 -zv $ipaddr $port           

echo "Wait: $waittime sec."     

sleep $waittime                         

nc -w 5 -zv $ipaddr $port         

 

 

  5. 해설

이 스크립트는 nc 명령어로 네트워크 통신 확인을 2회 실행하는데 중간에 난수로 만든 초만큼 기다립니다. 난수는 bash 셸 변수 RANDOM을 이용합니다.

 

셸 스크립트를 작성하다보면 테스트를 위한 대기 시간이나 게임에서 쓰는 주사위 같은 곳에서 난수가 필요합니다. 하지만 sh 자체에는 난수를 생성하는 기능이 없으므로 /dev/urandom 등을 써서 난수를 조합해야 합니다. 하지만 bahs는 난수를 생성하는 기본 기능이 있습니다. 그것이 셸 변수 RANDOM입니다.

 

bash 셸 변수 RANDOM은 참조할 때마다 0에서 32767 사이의 정수값 난수를 돌려줍니다. 이것을 이용해서 1에서 n 사이 난수를 얻고 싶으면 다음처럼 산술 확장을 이용하기 바랍니다.

$((RANDOM % n + 1))

이것은 산술식의 나머지를 의미하는 연산자 %를 이용합니다. 예를 들어 n이 10이면 나머지는 0에서 9까지이므로 거기에 1을 더하면 1에서 10 사이 난수를 얻을 수 있습니다. 이것은 자주 사용하는 방법이므로 잘 알아두기 바랍니다.

 

은 우선 통신 확인을 할 대상 호스트 IP 주소와 포트 번호를 지정합니다. 이어서 는 확인 간격의 대기 시간(초)을 난수로 취득합니다. 여기서 대기 시간은 1에서 10의 난수를 얻기 위해 RANDOM 변수의 10의 나머지에 1을 더합니다. 얻은 난수를 셸 변수 waittime에 대입합니다.

 

은 nc 명령어로 통신 확인을 두 번하고 중간에 앞서 에서 취득한 난수(초)만틈 대기 합니다.

이렇게 해서 bash에서 간단히 난수값을 얻을 수 있습니다.

 

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글