shell指令碼如何擷取隨機數random

來源:互聯網
上載者:User

用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位隨機種子

本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/Linux/

取完種子後使用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次,執行後得到結果如下圖:

作者:cnblogs 懶人

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.