shell腳本獲取隨機數random


用C提供的取隨機數的方法srand和rand, 前者是給后者設置隨機數種子seed。

int rnd_num = 0;
srand(seed);       // time(NULL) 通常使用時間做種子
rnd_num = rand();  // 產生隨機數

 

產生種子的方法:

1. 使用日期時間

    時間作為種子很簡單,取當前日期和時間,但是存在一個陷阱:當多台機器並發執行產生隨機數時,出現相同隨機數的概率非常高。不推薦這種方式

 

2. 使用$RANDOM

需要系統支持,通過echo來檢測, 打印出一個隨機數字,證明當前環境支持$RANDOM,反之為空不支持:

~@ubuntu:~$ echo $RANDOM
2517

 

3. 使用/dev/urandom + tr

tr -cd 0-9 </dev/urandom | head -c 8  // 取8位隨機種子

 

取完種子后使用awk來生成隨機數,這里是一個簡單的函數rnd2, 參數$1和$2分別是生成隨機數的范圍

#$1 $2 是取值范圍
function rnd2() {
  if [ -z "$RANDOM" ] ; then
    SEED=`tr -cd 0-9 </dev/urandom | head -c 8`
  else
    SEED=$RANDOM
  fi

  RND_NUM=`echo $SEED $1 $2|awk '{srand($1);printf "%d",rand()*10000%($3-$2)+$2}'`
  echo $RND_NUM
}

 

寫了個循環,循環30次,執行后得到結果如下圖:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM