2012年7月23日 星期一

Bash Script - Random select element from array


#宣告起始陣列
arr=(a b c d e f g h i j k l)
#取得陣列長度
arr_len=${#arr[@]}
#宣告一新陣列,放置取得的內容
temar=()
#宣告一臨時陣列,放置已取得過的數字
noar=()


#宣告目標取得數,設為隨機數 (亦等於由陣列取出rum個值)
declare -i rum=$RANDOM*$arr_len/32767  
echo "Random select $rum object from arr"



#增加一個function,檢查隨機值是否已存在noar陣列中
check(){
         for x in ${noar[@]}
            do
               if [ "$x" == "$rno" ]; then
                        rno=$RANDOM*$arr_len/32767
                             check
               fi
            done  
        }


#當取得個數尚未等於目標數時進入for迴圈
for ((i=0 ; i <$rum ; i++))
   do
        #宣告選取arr陣列中第rno個值,設為隨機數
        declare -i rno=$RANDOM*$arr_len/32767
        #呼叫function "check"
        check
        #找出要把rno放到noar中的哪裡,為原noar長度+1
        declare -i rno_put=${#noar[@]}+1
        # 將rno隨機數放置noar陣列中
        noar[$rno_put]="$rno"
        # temar 的第i個數字設為arr陣列中的第rno個
        temar[$i]="${arr[$rno]}"
   done
     #印出所有temar內容
      echo "=======temar: ${temar[@]}==========="