WindowsやLinuxでのコマンド操作で、ランダムな値を取得してその値を元にして処理を行わせたいときがあります。
そこでここでは、Windowsのコマンドプロンプト(バッチファイル)やPowerShellコマンドレット、Linuxのそれぞれで乱数を生成する方法を解説します。
目次
Windowsの場合
Windowsコマンドで乱数を生成
コマンドプロンプトやバッチファイルで乱数を生成させたいときは、環境変数RANDOMを使用することで、0~32767の範囲で乱数を生成することができます。
たとえば、以下のようにコマンドプロンプトで「echo %RANDOM%」を複数回実行してみてください。実行するたびに乱数を取得できることを確認できます。
C:\>echo %RANDOM%
2101
C:\>echo %RANDOM%
23739
C:\>echo %RANDOM%
19578
C:\>echo %RANDOM%
20667
C:\>echo %RANDOM%
14122
C:\>echo %RANDOM%
8507
C:\>
また、指定した範囲の乱数を生成したいときは、以下のように計算式を用いることで任意の範囲の乱数を生成することができます。
たとえば、0~10の範囲で乱数を生成したいときは、以下のようにコマンドを実行します。
> set /a R=%RANDOM% % 11
0~100の範囲で乱数を生成したいときは、以下のようにコマンドを実行します。
> set /a R=%RANDOM% % 101
2000~3000の範囲で乱数を生成したいときは、以下のようにコマンドを実行します。
> set /a R=%RANDOM% % 1001 + 2000
PowerShellで乱数を生成
PowerShellで乱数を生成したいときは、Get-Randomコマンドレットを使います。Get-Randomを使えば、環境変数RANDOMより簡単に指定した範囲の乱数を生成できます。
たとえば、0~100の範囲で乱数を生成したいときは以下のようにコマンドを実行します。
PS> Get-Random -Maximum 100
100から200までの範囲で乱数を生成したいときは、以下のようにコマンドを実行します。
PS> Get-Random -Minimum 100 -Maximum 200
-100から100までの範囲で乱数を生成したいときは、以下のようにコマンドを実行します。
Get-Random -Minimum -100 -Maximum 100
配列から値を取得できる
Get-Randomでは、指定した配列の中からランダムに値を取得することもできます。
たとえば「1, 2, 3, 5, 8, 13」という配列からランダムに値を取得したいときは、以下のようにコマンドを実行します。
PS> 1, 2, 3, 5, 8, 13 | Get-Random
複数の値を取得することもできます。たとえば、配列からランダムに2つの値を取得したいときは、以下のようにコマンドを実行します。
PS> 1, 2, 3, 5, 8, 13 | Get-Random -Count 2
パスワード文字列を生成できる
Get-Randomでは、inputオプションで取得可能な文字を指定して、その範囲から値を取得できるので、応用すれば以下のように任意の桁数のパスワード文字列を生成することもできます。
PS> -join ((1..10) | foreach{Get-Random -input '0123456789!#$%&()=-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.ToCharArray()})
たとえば、上のコマンドではアルファベット大文字・小文字、記号、数値から10桁のパスワード文字列を生成しています。
Linuxの場合
Linuxでは、Windowsと同じように乱数を生成できる環境変数RANDOMが用意されており、0~32767の範囲で乱数を生成することができます。
たとえば、以下のように「echo $RANDOM」を複数回実行してみてください。実行するたびに乱数を取得できることを確認できます。
$ echo $RANDOM
7949
$ echo $RANDOM
3598
$ echo $RANDOM
32231
$ echo $RANDOM
6676
$ echo $RANDOM
2101
$
また、指定した範囲の乱数を生成したいときは、以下のように計算式を用いることで任意の範囲の乱数を生成することができます。
たとえば、0~10の範囲で乱数を生成したいときは、以下のようにコマンドを実行します。
$ echo $(($RANDOM % 11))
0~100の範囲で乱数を生成したいときは
$ echo $(($RANDOM % 101))
2000~3000の範囲で乱数を生成したいときは
$ echo $(($RANDOM % 1001 +2000))