首页 > 系统相关 >Linux生成随机数

Linux生成随机数

时间:2022-10-18 23:35:01浏览次数:84  
标签:随机数 Surpass +% echo surpass Linux date 生成 type

    在日常测试过程中,需要经常Mock部分数据,使其看起来具有随机性,虽然可以通过高级程序语言来进行实现,也非常高效快捷。除此之外还有没有其他办法呢?今天我们来探讨一下,在Liunx中如何快速生成随机数。

本次所使用的环境为CentOS 7.9.2009版本

1.生成随机数

1.1 通过内置环境变量

    系统内置的环境变量为:$RANDOM,因此我们可以很方便在命令行Shell脚本中进行调用。示例如下所示:

[Surpass@surpass ~]$ echo ${RANDOM}
32181
[Surpass@surpass ~]$ echo ${RANDOM}
25895

使用环境变量RANDOM生成的随机数据范围为:[0,32767]

1.2.通过date生成随机数

    通过date命令可以很轻松的获取以日期时间时间戳等及其组合生成的随机数,如下所示:

[Surpass@surpass ~]$ echo $(date +%Y)
2022
[Surpass@surpass ~]$ echo $(date +%y)
22
[Surpass@surpass ~]$ echo $(date +%m)
10
[Surpass@surpass ~]$ echo $(date +%d)
16
[Surpass@surpass ~]$ echo $(date +%H)
17
[Surpass@surpass ~]$ echo $(date +%M)
51
[Surpass@surpass ~]$ echo $(date +%S)
33
[Surpass@surpass ~]$ echo $(date +%s)
1665913933
[Surpass@surpass ~]$ echo $(date +%N)
282095646
[Surpass@surpass ~]$ echo $(date +%j)
289
[Surpass@surpass ~]$ echo $(date +%W)
41
[Surpass@surpass ~]$ echo $(date +%w)
0
[Surpass@surpass ~]$ echo $(date +%s%N)
1665914047328810115
[Surpass@surpass ~]$ echo $(date +%N) | cut -c 2-5
2591

1.3.通过文件CRC功能生成随机数

[Surpass@surpass ~]$ head -n 5 /dev/random | cksum | tr -d " "
2040488746800
[Surpass@surpass ~]$ head -n 5 /dev/random | cksum | tr -d " "
20130480601348

1.4 通过awk生成随机数据

[Surpass@surpass ~]$ awk 'BEGIN {srand();print rand()*1000000}'
656048

1.5 通过openssl生成随机数

    在使用openssl生成随机数据,其主要用法如下所示:

Surpass@surpass ~]$ openssl rand -h
Usage: rand [options] num
where options are
-out file             - write to file
-engine e             - use engine e, possibly a hardware device.
-rand file:file:... - seed PRNG from files
-base64               - base64 encode output
-hex                  - hex encode output
  • options主要使用的参数为base64hex用于指定输出时字符的编码方式
  • num:生成字符的长度

    示例如下所示:

[Surpass@surpass ~]$ openssl rand -hex 8
bd716306d68dc555
[Surpass@surpass ~]$ openssl rand -base64 8
dith7RwX07w=

1.6 利用uuid生成随机数

    UUID是Universally Unique Identifier的缩写,通常翻译为通用唯一识别码,因在所有时间和空间上具有唯一性,常用于分布式系统,用于全局唯一标识数据,如索引等。其格式通常由3216进制字符组成,使用-分隔为5段,每段数量依次为 8-4-4-4-12,在Python快速生成的UUID的方法如下所示:

import uuid
print(uuid.uuid4()) # ccda0d10-ecda-4d9e-b8ed-b893cfa0cc13

    在Liunx中,我们也可以利用系统自带的功能快速生成UUID,示例如下所示:

[Surpass@surpass ~]$ cat /proc/sys/kernel/random/uuid
9f0691a1-da3c-4dbc-89c5-213c86212b66

1.7 使用Hash功能生成随机数

    Linux中的工具md5sumsha1sumsha256sum、一般用于生成的文件的Hash码,如果一个文件没有发生更改,则文件Hash不会发生变化,利用这一特性,我们可以生成随机数据,示例如下所示:

[Surpass@surpass ~]$ head -n 5 /dev/random | md5sum | tr -d " " | tr -d "-"
9c6cb9c9bec984ff087fa45c3e36165d
[Surpass@surpass ~]$ head -n 5 /dev/random | sha1sum | tr -d " " | tr -d "-"
f7b62a311e7de3427ead5e1d0063080b2638a52e
[Surpass@surpass ~]$ head -n 5 /dev/random | sha256sum | tr -d " " | tr -d "-"
f68a98b49c00f2bdaa12a14f4ca79c8202b463653a2bb8ac24dbbeabe78c0921

1.8 使用shuf生成随机数

    shuf在Linux中常用于生成随机的排列,因此也是可以用来生成随机数的。示例如下所示:

[Surpass@surpass ~]$ shuf -i 100-900 -n 1
512
[Surpass@surpass ~]$ shuf -i 100-900 -n 1
638
[Surpass@surpass ~]$ shuf -i 100-900 -n 1
180
[Surpass@surpass ~]$ shuf -i 100-900 -n 1
397

    其常用参数如下所示:

参数 功能
-e,--echo 将每个ARG做为输入行
-i, --input-range=LO-HI 将数字范围LO(最小值)-HI(最高)之间的数值做为输入行
-n, --head-count=COUNT 输出行数范围
-r, --repeat 允许输出重复

若系统没有该命令,可以使用该命令进行安装sudo yum -y install coreutils

2.自定义生成随机数

2.1 生成指定范围内的随机数据

    示例代码如下所示:

#!/bin/bash

# Author: Surpass
# Date: 2022-10-16


function printMessage(){
 dt=$(date '+%F %T')
 type=$([ -z "$1" ] && echo "INFO" || echo "$1" | tr [:lower:] [:upper:])
 message=$([ -z "$2" ] && echo "NONE" || echo "$2")

 if [ "${type}" == "INFO" ]
   then
      echo -e "\033[32m ${dt} ${type} ${message}\033[0m"
 elif [ "${type}" == "WARNING" ]
    then
      echo -e "\033[33m ${dt} ${type} ${message}\033[0m"
 elif [ "${type}" == "ERROR" ]
    then
     echo -e "\033[31m ${dt} ${type} ${message}\033[0m"
 else
     echo -e "\033[34m ${dt} ${type} or ${message} error \033[0m"
 fi
 }

function createRandomNumer(){
 minNum=$1
 maxNum=$2
 range=$((${maxNum}-${minNum}+1))
 tmpRandomNum=$(awk 'BEGIN {srand();print rand()*1000000}')
 randomNumer=$((${tmpRandomNum}%${range}+${minNum}))
 echo ${randomNumer}
}

function main(){
  if [ $# -lt 2 ]
     then
        printMessage error "Must be two parameter,please check "
        exit 255  
  fi
  createRandomNumer $1 $2 
}

main $1 $2

    最终运行结果如下所示:

[Surpass@surpass ~]$ bash  createRandomNumber.sh 1000 9000
4312
[Surpass@surpass ~]$ bash  createRandomNumber.sh 1000 9000
6077
[Surpass@surpass ~]$ bash  createRandomNumber.sh 1000 9000
6077
[Surpass@surpass ~]$ bash  createRandomNumber.sh 1000 9000
6077
[Surpass@surpass ~]$ bash  createRandomNumber.sh 1000 9000
3929
[Surpass@surpass ~]$ bash  createRandomNumber.sh 1000 9000
6656

2.2 使用自定义数组生成随机数

    利用数组根据索引取值功能,我们可以先生成一个数组,然后产生一个随机索引,从而达到随机功能,示例代码如下所示:

#!/bin/bash

# Author: Surpass
# Date: 2022-10-16

function printMessage(){
 dt=$(date '+%F %T')
 type=$([ -z "$1" ] && echo "INFO" || echo "$1" | tr [:lower:] [:upper:])
 message=$([ -z "$2" ] && echo "NONE" || echo "$2")

 if [ "${type}" == "INFO" ]
   then
      echo -e "\033[32m ${dt} ${type} ${message}\033[0m"
 elif [ "${type}" == "WARNING" ]
    then
      echo -e "\033[33m ${dt} ${type} ${message}\033[0m"
 elif [ "${type}" == "ERROR" ]
    then
     echo -e "\033[31m ${dt} ${type} ${message}\033[0m"
 else
     echo -e "\033[34m ${dt} ${type} or ${message} error \033[0m"
 fi
 }

function getRandomNumber(){
  minNum=$1
  maxNum=$2
  randomArray=($(eval echo {${minNum}..${maxNum}}))
  randomArrayLength=${#randomArray[*]}
  randomNum=${randomArray[$((${RANDOM}%${randomArrayLength}))]}
  echo ${randomNum}
}

function main(){
  if [ $# -lt 2 ]
     then
        printMessage error "Must be two parameter,please check "
        exit 255
  fi
  getRandomNumber $1 $2
}

main $1 $2

    最终运行结果如下所示:

[Surpass@surpass ~]$ bash  createRandomNumberFromArray.sh 100 999
246
[Surpass@surpass ~]$ bash  createRandomNumberFromArray.sh 100 999
664
[Surpass@surpass ~]$ bash  createRandomNumberFromArray.sh 100 999
451
[Surpass@surpass ~]$ bash  createRandomNumberFromArray.sh 100 999
751
[Surpass@surpass ~]$ bash  createRandomNumberFromArray.sh 100 999
439
[Surpass@surpass ~]$ bash  createRandomNumberFromArray.sh 100
 2022-10-16 23:07:47 ERROR Must be two parameter,please check

Linux中生成数字序列参考文档:Shell 生成数字序列

原文地址:https://www.jianshu.com/p/69451fa92a6c

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

标签:随机数,Surpass,+%,echo,surpass,Linux,date,生成,type
From: https://www.cnblogs.com/surpassme/p/16804613.html

相关文章

  • linux常用命令
    1、常用命令命令对应英文作用lslist查看当前目录下的内容pwdprintworkdirectory查看当前所在目录cd[目录名]changedirectory切换目录touch......
  • Linux类常用命令
    1.浏览目录类命令1.1pwd命令pwd命令用于显示用户当前所处的目录。[root@localhost~]#pwd/root1.2cd命令cd命令用来在不同的目录之间切换[root@localhost~]#c......
  • linux初始化脚本(修改版)
    修改了老版本,编译安装nginx和二进制安装mysql合到一起,里面还是存在一些问题,在修改网卡那块,  #!/bin/bash#******************************************************......
  • linux 内核编译问题汇总
    一、编译设备树时找不到设备树包含的头文件设备树包中包含的头文件会到kernel/scripts/dtc/include-prefixes/dt-bindings目录下去查找(新版本内核),而dt-bindings目录......
  • linux基础命令
    转载:https://www.cnblogs.com/wwjjll/p/16804230.html虚拟机关键配置名词解释远程链接工具xshell基本使用linux命令准则系统运行命令常用快捷方式文件命令操作快......
  • linux基础
    今日内容概要虚拟机关键配置名词解释远程链接工具xshell基本使用linux命令准则系统运行命令常用快捷方式文件命令操作快照功能文件编辑命令文件编辑异常情况......
  • Linux命令每天都要使用,但又太长记不住怎么办?教你1个方法
    序言各位好啊,我是会编程的蜗牛,作为java开发者,我们肯定会与linux服务器打交道,关于linux服务器的连接工具,可以参考我的文章Tabby,一款老外都在用的 SSH工具,竟然还支持网页操......
  • linux网络 PXE批量安装 Kickstart无人值守安装
    PXE批量网络装机PXE(预启动执行环境,在操作系统之前运行)是由Intel公司开发的网络引导技术,工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装......
  • Linux中僵尸进程是什么意思?怎么查看僵尸进程?
    进程就是系统运行中的程序。是正在执行的一个程序或者命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。说起进程,那么你知道Linux中僵尸进程......
  • Python项目生成requirements.txt文件
    一、前言对于Python项目,生成和使用requirements.txt是十分必要的。通过requirements.txt可以一次性保存和安装项目所需要的所有库。尤其是在不同电脑操作时。allure......