shell 生成指定范围随机数与随机字符串

        分类:             shell              2014-04-22 22:17     20902人阅读     评论(5)     收藏     举报    

shell 生成指定范围随机数与随机字符串

1.使用系统的 $RANDOM 变量

  1. fdipzone@ubuntu:~$ echo $RANDOM
  2. 17617
fdipzone@ubuntu:~$ echo $RANDOM
17617

$RANDOM 的范围是 [0, 32767]

如需要生成超过32767的随机数,可以用以下方法实现。

例:生成400000~500000的随机数

  1. #!/bin/bash
  2. function rand(){
  3. min=$1
  4. max=$(($2-$min+1))
  5. num=$(($RANDOM+1000000000)) #增加一个10位的数再求余
  6. echo $(($num%$max+$min))
  7. }
  8. rnd=$(rand 400000 500000)
  9. echo $rnd
  10. exit 0
#!/bin/bash

function rand(){
min=$1
max=$(($2-$min+1))
num=$(($RANDOM+1000000000)) #增加一个10位的数再求余
echo $(($num%$max+$min))
} rnd=$(rand 400000 500000)
echo $rnd exit 0

2.使用date +%s%N

例:生成1~50的随机数

  1. #!/bin/bash
  2. function rand(){
  3. min=$1
  4. max=$(($2-$min+1))
  5. num=$(date +%s%N)
  6. echo $(($num%$max+$min))
  7. }
  8. rnd=$(rand 1 50)
  9. echo $rnd
  10. exit 0
#!/bin/bash

function rand(){
min=$1
max=$(($2-$min+1))
num=$(date +%s%N)
echo $(($num%$max+$min))
} rnd=$(rand 1 50)
echo $rnd exit 0

3.使用/dev/random 和 /dev/urandom

/dev/random 存储着系统当前运行环境的实时数据,是阻塞的随机数发生器,读取有时需要等待。

/dev/urandom 非阻塞随机数发生器,读取操作不会产生阻塞。

例:使用/dev/urandom生成100~500的随机数,使用urandom避免阻塞。

  1. #!/bin/bash
  2. function rand(){
  3. min=$1
  4. max=$(($2-$min+1))
  5. num=$(cat /dev/urandom | head -n 10 | cksum | awk -F ' ' '{print $1}')
  6. echo $(($num%$max+$min))
  7. }
  8. rnd=$(rand 100 500)
  9. echo $rnd
  10. exit 0
#!/bin/bash

function rand(){
min=$1
max=$(($2-$min+1))
num=$(cat /dev/urandom | head -n 10 | cksum | awk -F ' ' '{print $1}')
echo $(($num%$max+$min))
} rnd=$(rand 100 500)
echo $rnd exit 0

4.使用linux uuid

uuid 全称是通用唯一识别码,格式包含32个16进制数字,以'-'连接号分为5段。形式为8-4-4-4-12 的32个字符。

  1. fdipzone@ubuntu:~/shell$ cat /proc/sys/kernel/random/uuid
  2. fd496199-372a-403e-8ec9-bf4c52cbd9cd
fdipzone@ubuntu:~/shell$ cat /proc/sys/kernel/random/uuid
fd496199-372a-403e-8ec9-bf4c52cbd9cd

例:使用linux uuid 生成100~500随机数

  1. #!/bin/bash
  2. function rand(){
  3. min=$1
  4. max=$(($2-$min+1))
  5. num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}')
  6. echo $(($num%$max+$min))
  7. }
  8. rnd=$(rand 100 500)
  9. echo $rnd
  10. exit 0
#!/bin/bash

function rand(){
min=$1
max=$(($2-$min+1))
num=$(cat /proc/sys/kernel/random/uuid | cksum | awk -F ' ' '{print $1}')
echo $(($num%$max+$min))
} rnd=$(rand 100 500)
echo $rnd exit 0

5.生成随机字符串

例:生成10位随机字符串

  1. #使用date 生成随机字符串
  2. date +%s%N | md5sum | head -c 10
  3. #使用 /dev/urandom 生成随机字符串
  4. cat /dev/urandom | head -n 10 | md5sum | head -c 10

shell 生成指定范围随机数与随机字符串 .的更多相关文章

  1. random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串

    openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...

  2. python生成随机数、随机字符串

    python生成随机数.随机字符串 import randomimport string # 随机整数:print random.randint(1,50) # 随机选取0到100间的偶数:print ...

  3. JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...

  4. shell生成指定长度的随机数

    生成指定长度是随机数 # 8位纯数字的随机数 tr -cd '0-9' </dev/urandom | head -c 8 # 16位包含字母.数字的随机数 tr -cd '[:alnum:]' ...

  5. Lua在给定范围内,生成指定个数不重复随机数组

    本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...

  6. js随机生成一个数组中的随机字符串以及更新验证码

    随机生成m,n范围的值得公式: Math.random()*(n-m)+m: 改正公式:Math.random()*(n+1-m)+m // 生成随机字符串function randomMixed(n ...

  7. mysql 生成指定范围随机数

    生成随机数 生成0-3的随机数 SELECT RAND() * 3 最大不会超过3, SELECT FLOOR(RAND() * 3) 上面生成整数的值是0,1,2,3生成的随机整数是1,2,3的话, ...

  8. java 与日期转换相关的方法(java.util.date类型和java.sql.date类型互相转换)、随机字符串生成方法、UUID生产随机字符串

    package com.oop.util; import java.text.*; import java.util.UUID; import org.junit.Test; /* * 与日期相关的工 ...

  9. JavaScript实现生成指定范围随机数和一个包含不重复数的随机数组

    目前JavaScript里面还没有现成的方法可以实现这个简单地需求,我们就需要自己写代码了. 在js中有个函数:Math.random() 这个函数可以生成 [0,1) 的一个随机数. 我们的简单的改 ...

随机推荐

  1. jsp+oracle实现数据库内容以表格形式在前台显示(包含分页)

    jsp+oracle实现数据库内容以表格形式在前台显示(包含分页) 在文件夹内新增list_emp.jsp 代码如下: <%@ page contentType="text/html& ...

  2. Java 使用正则表达式

    用正则表达式来处理掉内容中的特定字符,下面的代码为,去掉P标签中的属性width 设置.将P标签处理后在拼接成字符串 /** * 给 P 标签去掉width 样式设置 * @param content ...

  3. Java基础-String 存储机制管理

    JVM运行的时候,将内存分为两个部分,一部分是堆,一部分是栈.堆中存放的是创建对象,而栈中存放的则是方法调用过程中的局部变量或引用.在设计JAVA字符串对象内存实现的时候,在堆中又开辟了一块很小的内存 ...

  4. Yii2 实现修改密码功能

    YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数据库中的密码相比较).YII2有自己的加密以及密码验证 ...

  5. Android中实现自定义的拍照应用

    可以参考:http://www.android-doc.com/guide/topics/media/camera.html 一.添加相应的权限 <uses-permission android ...

  6. dict内部方法

    代码: #dict内部方法 vdic={'name':'kamil','age':23} print(dir(vdic)) vdic1 = vdic.copy()#copy(self):浅拷贝 pri ...

  7. 41.Android之图片放大缩小学习

    生活中经常会用到图片放大和缩小,今天简单学习下. 思路:1.添加一个操作图片放大和缩小类;  2. 布局文件中引用这个自定义控件;  3. 主Activity一些修改. 代码如下: 增加图片操作类: ...

  8. CRUD之delete操作

    在公司的项目中delete之后的操作有两种处理方式 1.后台删除成功之后前台页面刷新 2.后台删除成功之后页面不刷新,但是数据所在的那个div会刷新一次 3.后台删除,页面上做了一个删除,删除的td没 ...

  9. IQ测试

    1.4个人过桥,只能两两过桥,且只有一盏灯,必须有灯才能过桥,4个人过桥时间分别为1,2,5,10分钟,最短多少时间可以过桥? 答案:1和2先走,1再返回,花3分钟.5和10走,2回去,花了3+10+ ...

  10. “面向对象"和"面向过程"到底有什么区别?

    链接:http://www.zhihu.com/question/27468564/answer/101951302 当软件还非常简单的时候,我们只需要面向过程编程: 定义函数函数一函数二函数三函数四 ...