• ---从文档里读取,并执行遍历
    正反抽奖取正,进入下一轮,直到剩余1人或者为空
    ①对结果做判断,剩余1人播报,为空则重复执行抽奖,直到抽中
    ②有中奖者时,剔除当前人员,剩余人员存入新变量,下一轮抽奖从新变量中取值
    ③抽奖次数可自定义

    #次数控制,可输入进行抽奖多少次
    function draw()
    {
    read -p "请输入抽奖次数:" num;
    for((i=0;i<$num;i++));
    do
    lucky $i
    done
    }

    #抽奖,每次只能抽中一个人,未抽中直接继续抽奖直到抽中为止
    function lucky(){
    times=$1;#将抽奖次数参数赋值给times
    seeds=$(while read line; do echo ${line// /..}; done < name.wx);
    #new_seeds="";
    count=0; #抽中人数
    index=0; #一次多少轮抽中最后一个人
    while((count!=1));
    do
    ((index+=1));

    seeds=$(for line in $seeds; do ((RANDOM%2==1)) && echo $line ; done);
    #echo;
    #echo $index 轮:$seeds;
    count=$(echo "$seeds" | wc -l ); #计算最后人数
    #echo count:$count;
    #人数为1则去重--暂时还未实现
    #如果最后轮次的人名为空,则通过递归继续抽奖,人数为1则打印播报中奖,结束执行下一轮抽奖,否则继续
    [ -z "$seeds" ] && lucky $times || (((count==1)) && echo $(($times+1)) 轮的天选之人:$seeds) || continue;

    done;

    }

    总结:
    1、目前思路还有些欠缺,可能用函数、递归问题,感觉去重已经把我给有点绕进去了😭 😭

  • 👏