腳本,實現功能:例如一個小組有八個人,需要隨機選取n個人。用戶執行該腳本,並且用參數傳遞進去數值,作爲需要選取的人數,輸出結果,然後輸出結果:
- #!/bin/bash
- #Author:
- #Date & Time: 2010-12-24-20:42:42
- #Description:
- #Version : 1.0.1
- //定義錯誤輸出函數
- usag () {
- echo -e "Wrong Option or Wrong Value . \033[31m USAG:\033[0m`basename $0` [-n num] ;And number range:0<num<8"
- exit 1
- }
- let NUM=1 //如果用戶不傳遞參數,就默認爲是隨機一個人
- //讀取判斷用戶輸入的參數值
- while getopts ":n:" SWITCH ; do
- case $SWITCH in
- n)
- [ $OPTARG -gt 8 -o $OPTARG -lt 1 ] && usag
- NUM=$OPTARG
- ;;
- \?)
- usag
- ;;
- esac
- done
- arr=(guokeqin weiwei niuyue sunhaoyuan zhaoyupo liuxingya gaohuina liyuchao)
- if [ $NUM -eq 1 ];then
- INDEX=$[$RANDOM%8]
- echo "${arr[$INDEX]}"
- else
- // ${#arr[*]} 特殊用法,返回arr[]數組內非空值的個數.
- until [ ${#indexarr[*]} -eq $NUM ] ; do
- tmp=$[$RANDOM%8]
- echo "${index[*]}"| grep "$tmp" || indexarr[${tmp}]=$tmp
- //上面也可不進行判斷直接進行賦值,如果沒有重複則賦值後數組非空值值個數增1,如果重複則覆蓋,非空值個數不變
- done
- //開始順序輸出數組中非空值部分對應的數組值.
- for I in $(seq 1 8 );do
- let I--
- [ ${indexarr[$I]} -eq $I ] &>/dev/null && echo "${arr[${indexarr[$I]}]}"
- done
- fi
測試結果:
知識:
1. 數組用法例:
集體賦值:ARRAY=(1 2 3 4 5 6 )
單個賦值:ARRAY[3]=6
顯示單個數組值: echo ${ARRAY[3]
顯示數組中所有非空值:echo ${ARRAY[*]}
顯示數組中所有非空值個數:echo ${#ARRAY[*]}
2. 變量RANDOM
系統自帶的隨機數變量
其由系統隨機生成16位id二進制數。需要指定範圍時進行取模。