脚本,实现功能:例如一个小组有八个人,需要随机选取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二进制数。需要指定范围时进行取模。