玩转shell-shell抽奖程序(github源码)
文章目录前言代码抽奖程序一抽奖程序二前言此篇博文做 shell 抽奖程序的介绍,有几种类型的抽奖程序,请见如下环境bash shell 3centos 7vim 编辑器代码抽奖程序一这个抽奖程序要求需要经过多轮抽奖并显示每轮的结果,每轮尽量筛除一半的人,最后一轮只留下一人,最后一人就是获奖者#! /bin/bash# 循环读取多行数据choujiang(){while read -a linedo
·
前言
此篇博文做 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 中写有非常详细的项目介绍和使用说明,并且支持中英双译哦!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)