腳本,實現對八個人的隨機random

 

腳本,實現功能:例如一個小組有八個人,需要隨機選取n個人。用戶執行該腳本,並且用參數傳遞進去數值,作爲需要選取的人數,輸出結果,然後輸出結果:

  1. #!/bin/bash 
  2. #Author:  
  3. #Date & Time: 2010-12-24-20:42:42 
  4. #Description:  
  5. #Version : 1.0.1 
  6. //定義錯誤輸出函數
  7. usag () { 
  8.    echo -e "Wrong Option or Wrong Value . \033[31m USAG:\033[0m`basename $0` [-n num] ;And number range:0<num<8" 
  9.    exit 1 
  10.         } 
  11.     let NUM=1 //如果用戶不傳遞參數,就默認爲是隨機一個人
  12. //讀取判斷用戶輸入的參數值
  13.     while getopts ":n:" SWITCH ; do 
  14.         case $SWITCH in 
  15.          n) 
  16.            [ $OPTARG -gt 8 -o $OPTARG -lt 1 ] && usag 
  17.            NUM=$OPTARG 
  18.            ;; 
  19.          \?) 
  20.             usag 
  21.          ;; 
  22.         esac
  23.      done 
  24.  
  25. arr=(guokeqin weiwei niuyue sunhaoyuan zhaoyupo liuxingya gaohuina liyuchao) 
  26.  
  27. if [ $NUM -eq 1 ];then 
  28.   INDEX=$[$RANDOM%8] 
  29.   echo "${arr[$INDEX]}" 
  30. else 
  31.   // ${#arr[*]} 特殊用法,返回arr[]數組內非空值的個數.
  32.  until [ ${#indexarr[*]} -eq $NUM ] ; do 
  33.      tmp=$[$RANDOM%8] 
  34.      echo "${index[*]}"| grep "$tmp" || indexarr[${tmp}]=$tmp
  35. //上面也可不進行判斷直接進行賦值,如果沒有重複則賦值後數組非空值值個數增1,如果重複則覆蓋,非空值個數不變
  36.    done 
  37.   //開始順序輸出數組中非空值部分對應的數組值.
  38.    for I in $(seq 1 8 );do 
  39.     let I-- 
  40.     [ ${indexarr[$I]} -eq $I ] &>/dev/null && echo "${arr[${indexarr[$I]}]}" 
  41.    done 
  42. fi 
  43.  


 測試結果:

知識:

1. 數組用法例:

集體賦值:ARRAY=(1 2 3 4 5 6 )
單個賦值:ARRAY[3]=6
顯示單個數組值: echo ${ARRAY[3]

顯示數組中所有非空值:echo ${ARRAY[*]}

顯示數組中所有非空值個數:echo ${#ARRAY[*]}

 

2. 變量RANDOM

系統自帶的隨機數變量

其由系統隨機生成16位id二進制數。需要指定範圍時進行取模。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章