玩转shell-shell抽奖程序(github源码)


在这里插入图片描述

前言

此篇博文做 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 中写有非常详细的项目介绍和使用说明,并且支持中英双译哦!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值