Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1260627
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类: 嵌入式

2012-04-11 12:29:22

方法一:

    命令大致如下:

    echo $((16#`dd if=/dev/urandom bs=1 count=4 2>/dev/null| od -A n -t x4|sed s/[^1-9a-fA-F]//g`))

    分开来看:

    echo $((16#ABC))  意思是将十六进制数ABC转换成十进制数

    `command` 意思是两个`中间的命令执行结果做为外壳命令的参数

    /dev/urandom 是个生成随机数的设备,比/dev/random稍不安全,但产生速度极快

    dd if=/dev/urndom bs=1 count=4 从随机数设备中取前4个字节(32位数)

    2>/dev/null 意思是将错误信息重定向到空设备中

    od -A n -t x4 意思是将dd过来的数据(一个随机的32位值)进行转换输出,-A n是不输出偏移标志,-t x4是将数字用16进制输出,并且4个字节一组,这样就以16进制输出一个32位的数

    sed s/[^1-9a-fA-F]//g 意思是去年输出文件中非十六进制可接受的字符(此例中主要是删除行前的空格,也可以用tr -d ' ' 或 awk '{print $1}'处理)

    方法二:

    date  --rfc-3339=ns|sed -n "s/.*\.0*\(.*\)+.*/\1/p"

    利用date命令生成的纳秒数作为随机数

    命令也可以用:

    date  --rfc-3339=ns|sed "s/\.0*\|+/\n/g"|sed -e 1d -e 3d

    或

    date  --rfc-3339=ns|awk -F "[ \t.+]" '{printf("%d\n",$3)}'

    可以用 echo 表达式|bc 生成特定运算结果,比如:

    echo $((16#`dd if=/dev/urandom bs=1 count=4 2>/dev/null| od -A n -t x4|sed s/[^1-9a-fA-F]//g`)) %1024|bc 可以生成0-1023范围内的随机数

阅读(798) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~