July
3rd
2009

Linux下生成随机数字

实用技巧 没有评论

评分: 很差劲不怎样还可以还不错太棒了
Loading ... Loading ...

方法一:

命令大致如下:

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}’处理)

可以用”echo 表达式|bc“生成特定运算结果,比如生成0-1023范围内的随机数:

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

方法二:

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

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

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)}’

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Twitter
  • Live
  • LinkedIn
  • Yahoo! Bookmarks
  • RSS
  • email
  • Print
  • PDF

相关文章阅读

喜欢这篇文章?订阅我的RSS,就可以自动获取最新内容了!

Tags:, .
评论数量: 没有评论
引用: http://www.i4wei.com/2009/07/905/


  1. 没有评论.
  1. 还没有trackbacks.