本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
1、生成随机数
echo $RANDOM
2、生成随机字符串
cat /dev/urandom | strings -n C | head -n L
生成全字符的随机字符串
cat /dev/urandom | sed 's/[^a-zA-Z0-9]//g' | strings -n C | head -n L
生成数字加字母的随机字符串
。
其中C表示字符串的字符数,L表示要生成多少行字符。
一、通过时间获得随机数(date)
这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。
[chengmo@centos5
shell]$
date
+%s
1287764773
[chengmo@centos5
shell]$
date
+%N
738710457
[chengmo@centos5
shell]$
date
+%s%N
1287764807051101270
通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。
#!/bin/sh
function
random()
min=$1;
max=$2-$1;
num=$(
date
+%s+%N);
((retnum=num%max+min));
echo
$retnum;
for
i
in
{1..10};
out=$(random
2 10000);
echo
$i,
"2-10000"
,$out;
done
;
3、通过系统内部唯一数据生成随机数(/dev/random,urandom)
我们知道dev目录下面,是linux一些默认设备,它给我们感觉就是放的是键盘,硬盘,光驱等设备的对应文件了。 其实linux有些设备很特殊,有特殊用途。前面我们说到的:/
dev/[udp|tcp]/host/port
比较特殊吧。呵呵,有扯远了。
/dev/random设备,存储着系统当前运行的环境的实时数据。它可以看作是系统某个时候,唯一值数据,因此可以用作随机数元数据。我们可以通过文件读取方式,读得里面数据。/dev/urandom这个设备数据与random里面一样。只是,它是非阻塞的随机数发生器,读取操作不会产生阻塞。
[chengmo@centos5
shell]$
head
-1
/dev/urandom
ù…KTtanV1&“2íùU“
F|_ ”mEeUrá=JˉTAìAúRtó
[chengmo@centos5
~
/shell
]$
head
-200
/dev/urandom
|
cksum
1615228479
50333
[chengmo@centos5
shell]$
head
-200
/dev/urandom
|
cksum |
cut
-f1
484750180
以” “分割,然后得到分割的第一个字段数据
得到整型数据,然后,类似一的方法就可以获得到随机数了。 题外话:在程序里面,我们经常md5得到唯一值,然后是字符串的,如果想表示成整型方式,可以通过crc函数.crc是循环冗余校验,相同数据通过运算,都会得到一串整型数据。现在这种验证应用很广。详细要了解,可以参考:
crc
.
下面还有个方法,直接从设备读取生成好的uuid码。
4、读取linux 的uuid码
在提到这个之前,有个概念,就是什么是uuid呢?
UUID码全称是
通用唯一识别码
(Universally Unique Identifier, UUID),它 是一个软件建构的标准,亦为
自由软件基金会
(Open Software Foundation, OSF) 的组织在
分布式计算环境
(Distributed Computing Environment, DCE) 领域的一部份。
UUID 的目的
,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。它会让网络任何一台计算机所生成的uuid码,都是互联网整个服务器网络中唯一的。它的原信息会加入硬件,时间,机器当前运行信息等等。
UUID格式是:
包含32个
16进位
数字,以“-”连接号分为五段,形式为8-4-4-4-12的32个字符。范例;550e8400-e29b-41d4-a716-446655440000 ,所以:UUID理论上的总数为2
16 x 8
=2
128
,约等于3.4 x 10
38
。 也就是说若每奈秒产生1兆个UUID,要花100亿年才会将所有UUID用完。
其实,大家做数据库设计时候,肯定听说过,guid(
全局唯一标识符
)码,它其实是与uuid类似,由微软支持。 这里编码,基本有操作系统内核产生。大家记得把,在windows里面,无论数据库,还是其它软件,很容易得到这个uuid编码。
linux 的uuid码
linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内。其实,random目录,里面还有很多其它文件,都与生成uuid有关系的。
[chengmo@centos5
~
/shell
]$
cat
/proc/sys/kernel/random/uuid
dff68213-b700-4947-87b1-d9e640334196
[chengmo@centos5
~
/shell
]$
cat
/proc/sys/kernel/random/uuid
7b57209a-d285-4fd0-88b4-9d3162d2e1bc
[chengmo@centos5
~
/shell
]$
cat
/proc/sys/kernel/random/uuid
|
cksum |
cut
-f1
2141807556
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(二)
【运维知识高级篇】超详细的Shell编程讲解2(变量切片+统计变量长度+字串删除+字串替换+七种方法进行数值运算+整数比较+多整数比较+文件判断+字符串比对+正则比对+配合三剑客的高阶用法)(一)