在这里插入图片描述

前言

此篇博文做 shell 抽奖程序的介绍,有几种类型的抽奖程序,请见如下

环境

  • bash shell 3
  • centos 7
  • vim 编辑器

代码

抽奖程序一

这个抽奖程序要求需要经过多轮抽奖并显示每轮的结果,每轮尽量筛除一半的人,最后一轮只留下一人,最后一人就是获奖者

#! /bin/bash
# 循环读取多行数据
chouJiang(){
    while read -a line
    do
            arr+=(${line[@]});
    done;
    # 若没有抽奖人
    if((${#arr[@]}==0))
    then
            printf "无人抽奖!\n";
            exit;
    fi;
    # 记录抽奖轮次
    count=0;
    printf "\033[;32m \t%s \033[0m" "抽奖人员有:";
    printf "${arr[*]}\n";
    # 抽奖进行多轮次循环
    while((1))
    do
            # 程序最终出口
            if((${#arr[@]}<=1))
            then
                    printf "\033[;32m \n\t%s \033[0m\033[;31m %s\n \033[0m" "经过$count轮抽奖,最终获奖者:" "${arr[0]}";
                    break;
            fi;
            # 每轮开始的初始操作
            result=();
            let "count++";
            printf "\033[;32m \t%s \033[0m" "第$count轮抽奖:";
            # 当前轮次抽取 arr 数组中的人
            for i in ${!arr[@]}
            do
                    # 通过随机数看是否选出他,若选中就保存到 result 数组
                    if((RANDOM%2==0))
                    then
                            result+=(${arr[$i]});
                    fi;
            done;
            # 若谁都没被选到就重抽
            if((${#result[@]}!=0))
            then
                    # 输出当前轮次被选到的人
                    printf "\033[;33m %s\n \033[0m" "${result[*]}";
                    arr=(${result[@]});
            else
                    printf "无人抽中,再来一次\n";
            fi;
    done;
}

抽奖程序二

这个抽奖程序要求只用显示最后获奖者,传一个参数表示有几个人获奖

#! /bin/bash
chouJiang{
    while read -a line
    do
            arr+=(${line[@]});
    done;

    if((${#arr[@]}<$1))
    then
            printf "\033[;31m %s\n \033[0m" "输入异常,结束!";
            exit;
    fi;

    # 数组长度
    size=${#arr[@]};

    # 轮次
    count=0;

    # count 轮循环,每次取一人
    while((count<$1))
    do
            index=$((RANDOM%size));
            while [[ ! ${arr[index]} ]]
            do
                    index=$((RANDOM%size));
            done;
            result+=(${arr[index]});
            unset arr[index];
            ((count++));
    done;

    # 输出获奖者
    printf "\033[;32m %s\n \033[0m" "${result[*]}";
}

终极版抽奖程序三

这一版本抽奖程序是经过了最终优化的,该版本 bash 编写的抽奖程序已经发布于 github 上,并且其中已经提供了抽奖成员名单,你不用这个现成的名单也可以,用自己的也行,bash 编写的抽奖项目 github 地址如下:

github:lottery4bash

需要的童鞋们可以自取,可以用于临时随机的抽奖,支持抽一人和抽多人。只用将这个 lucky.sh 拷贝到自己的服务器中,需要的时候一用即可,README.md 中写有非常详细的项目介绍和使用说明,并且支持中英双译哦!

在这里插入图片描述在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐