Linux

Bash 程式設計教學與範例:產生隨機亂數

介紹如何在 bash 指令稿中產生隨機的亂數資料。

產生隨機亂數

bash 中的 $RANDOM 是一個特殊的變數,每當這個變數被讀取時,就會自動產生一個隨機的亂數,而數值的範圍介於 032767 之間:

# 產生介於 0 到 32767 的亂數
echo $RANDOM
13342

限制亂數範圍

如果想要限制亂數的數值範圍,可將 $RANDOM 所產生的亂數加上一些簡單的數學運算,就可以自由調整數值的範圍,例如產生介於 09 的亂數:

# 產生介於 0 到 9 的亂數
echo $(( $RANDOM % 10 ))
2

產生介於 110 的亂數:

# 產生介於 1 到 10 的亂數
echo $(( $RANDOM % 10 + 1 ))
9

指定亂數種子

$RANDOM 所產生的亂數每次都不同,如果在程式的開發與除錯時,需要固定產生的亂數,可以在產生亂數之前,先設定亂數種子,這樣就可以確保每次執行都會產生相同的亂數序列,方便驗證程式的正確性:

# 指定亂數種子
RANDOM=123

# 產生亂數
echo $RANDOM
2877

亂數設備檔 /dev/urandom

除了使用 bash 內建的 $RANDOM 之外,我們也可以使用 Linux 系統上所提供的亂數設備檔 /dev/urandom 來產生亂數,這個設備檔會提供二進位的亂數資料,需要搭配 od 來產生亂數:

# 2 位元組,無號整數
od -vAn -N2 -tu2 < /dev/urandom
 23514
# 1 位元組,有號整數
od -vAn -N1 -td1 < /dev/urandom
 -125
# 4 位元組,有號整數
od -vAn -N4 -tu4 < /dev/urandom
 2675093016

自動指定亂數種子

如果希望更改 $RANDOM 預設的亂數種子,以下是兩種自動指定亂數種子的方式。

一種是從 /dev/urandom 取得亂數,然後作為亂數種子:

# 從 /dev/urandom 取得亂數
SEED=$(od -vAn -N2 -tu2 < /dev/urandom)

# 指定亂數種子
RANDOM=$SEED

# 產生亂數
echo $RANDOM

另外一種是以目前指令稿的行程 ID(process id)作為亂數種子:

# 以行程 ID 來指定亂數種子
RANDOM=$$

# 產生亂數
echo $RANDOM

參考資料:TLDP

Share
Published by
Office Guide
Tags: Bash

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago