shell编程:完成一个简单的不重复抽取且自动重新开始自动抽奖脚本

本文档详细介绍了如何使用Bash脚本来实现一个不重复的抽奖功能,包括建立文件、实现基础抽奖、避免重复抽取以及抽完自动重新开始的逻辑。通过vim编辑器完成脚本,并进行了异常处理和连续抽奖的优化。此外,还提供了脚本的其他实现思路。
摘要由CSDN通过智能技术生成

文章目录

前言:脚本的目标与分析

        脚本的目标:

        脚本的分析:

一、 实现脚本的大致步骤

脚本环境:

step1:文件的建立

step2:抽奖功能的实现

step3:不重复抽取功能的实现

step4:抽完自动重新开始的实现与step3的优化

二、用vim完成脚本(version1)

三、脚本的调试与优化

(1)文件异常的处理办法(version-1.1)

(2)连续抽奖的办法(vision-1.1的改良与部署)

四、脚本的其他思路


前言:脚本的目标与分析

        脚本的目标:

        实现一个类似于上课点名的抽奖脚本,抽过的人在本轮中不会重复出现,直到抽完为止,且抽完所有人后自动开始重新抽取。

        脚本的分析:

        由目标可知,脚本需要具备的主要功能为以下几点:

                1.实现简单的抽奖功能

                2.抽奖每轮不重复

                3.抽完一轮后自动重新开始

        抽奖功能我们可以用随机数RANDOM来实现,假如一个班有50个同学,则在文件内对应50个编号,我们可以用((RANDOM%50 + 1))来随机出这50个编号(RANDOM%50求余可以得出0到49的随机数,我们在此基础上加一即可得到1~50的随机数),而抽到的编号我们可以在另一个文件内记录,之后每次判断随机数是否在抽过的编号文件内出现,如果没有出现则代表这个同学没有被抽过。

        而抽完之后自动重新开始这个功能我们可以先判断所有同学是否都被抽到过,只要我们确保每个同学不会被重复选取则当两个文件内容数量相等,则代表着所有同学都被抽过一次了。然后只要我们把抽过名单清空,则可以开始新一轮抽奖。

一、 实现脚本的大致步骤

脚本环境:

centos7        bash 4.2.46(2)-release (x86_64-redha

t-linux-gnu)         vim编辑器 

step1:文件的建立

        我们先创建一个用于测试的名单文件name.txt并往里面输入几个名字

​
cat >> name.txt <<EOF
> 刘一
> 陈二
> 张三
> 李四
> 王五
> 赵六
> 孙七
> 周八
> 吴九
> 郑十
> EOF

​

step2:抽奖功能的实现

先完成一个基础的抽奖:

        因为名单内的名字都是以行为单位的,我们可以认为,总行数即为总人数,我们可以用cat和wc -l 的组合命令求得总人数,同理可以求出被抽过的人数。我们用num_total来表示总人数。用num_lucky来表示被抽过的人数。

num_total=$(cat name.txt|wc -l)           #定义num_total为抽奖的总人数
num_lucky=$(cat lucky.txt|wc -l)          #定义num_lucky为被抽过的人数

因此我们需要1~num_total的随机数num,即

num=$((RANDOM%(num_total)+1)) 

然后我们可以用head和tail语句定位那个随机编号num

cat name.txt|head -$num|tail -1
#假设num=5,则上述输出的是头五行的
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值