首页 > 系统 > Linux > 正文

Linux Shell 生成随机数和随机字符串的方法示例

2019-10-26 18:59:03
字体:
来源:转载
供稿:网友

日常生活中,会经常用到随机数,使用场景非常广泛,例如买彩票、丢骰子、抽签、年会抽奖等。

Shell 下如何生成随机数呢,米扑博客特意写了本文,总结 Linux Shell 产生随机数的多种方法。

计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数)。实际上,伪随机数和理想随机数也是相对的概念,例如伪随机数在1万万亿亿亿年内也无法重复,算是理想随机数么?

伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产生算法将可以产生一个非常长的不重复的序列,例如 UUID(通用唯一识别码)在100亿年内才可用完。

 1. 使用系统的 $RANDOM 变量(CentOS、Ubuntu、MacOS 都支持,但只有5位数随机)

mimvp@ubuntu:~$ echo $RANDOM17617

$RANDOM 的范围是 [0, 32767]

示例:使用 for 循环来验证:

#!/bin/bash# mimvp.com 2016.05.10function print_random() {  for i in {1..10};  do    echo -e "$i /t $RANDOM"  done}print_random

运行结果:

# sh mimvp_shell_rand.sh
1        20191
2        16817
3        25971
4        1489
5        34
6        25183
7        920
8        315
9        18845
10       29519

如需要生成超过32767的随机数,可以用以下方法实现(有缺陷)

例:生成 40,000,000~50,000,000 的随机数,但最后末尾五位数在随机变化,实现原理有缺陷

#!/bin/bash# mimvp.com 2016.05.10## Linux 系统随机数 + 范围上限值后, 再取余function mimvp_random_bignum() {  min=$1  max=$2  mid=$(($max-$min+1))  num=$(($RANDOM+$max))    # 随机数+范围上限, 然后取余  randnum=$(($num%$mid+$min)) # 随机数包含上下限边界数值  echo $randnum}function print_random_bignum() {  for i in {1..10};  do    bignum=$(mimvp_random_bignum 40000000 50000000)    echo -e "$i /t $bignum"  done}print_random_bignum

运行结果:

# sh mimvp_shell_rand.sh 
1        40022422
2        40014261
3        40022712
4        40016695
5        40026575
6        40032198
7        40026667
8        40016024

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表