方法一:
指令大緻如下:
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範圍内的随機數
本文轉自 張宇 51CTO部落格,原文連結:http://blog.51cto.com/zhangyu/172782,如需轉載請自行聯系原作者