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에서 간단히 난수값을 얻을 수 있습니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
셸 스크립트를 sh로 작성할까? bash로 작성할까? (0) | 2021.07.13 |
---|---|
[Linux 셸 스크립트] bash - 131 간단한 메뉴를 표시해서 사용자가 선택할 수 있게 하기 (0) | 2021.07.13 |
[Linux 셸 스크립트] bash - 130 파이프 처리로 각 명령어 종료 상태값 조사하기 (0) | 2021.07.13 |
[Linux 셸 스크립트] bash - 129 중간 파일 없이 명령어 출력을 파일처럼 다루기 (0) | 2021.07.06 |
[Linux 셸 스크립트] bash - 128 변수 내부 문자열 일부를 치환하기 (0) | 2021.07.06 |
댓글