Shell编程案例:抽奖程序(从班级名单里随机抽取学生名字)

该博客介绍了一个使用Bash脚本创建的简单抽奖系统,它从包含学生名单的文本文件中随机选择中奖者。脚本首先清空中奖名单文件,然后通过循环和随机数生成选择幸运号码。如果中奖者未出现在已中奖名单中,则将其记录并显示。用户可以通过输入任意键继续或按'q'退出。当所有学生都中奖后,脚本会结束并重新开始。这个过程确保了每个学生都有平等的中奖机会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路

先生成一个班级学生名单文件 student_name.txt

我这里在文件里放入了9个学生的名字,使用以下命令可以统计出行数。

cat student_name.txt |wc -l

实现抽奖,即需要实现随机。

以下命令可以实现产生一个1-9区间的随机数。

echo $((RANDOM%9 + 1))

脚本内容

#!/bin/bash
#清空中奖文件,保证每次执行抽奖脚本都是从头开始
>lucky_person.txt
#读取student_name.txt里的文件
num=$(cat student_name.txt|wc -l)
while true
do
	lucky_num=$((RANDOM % num + 1))
	lucky_person=$(cat student_name.txt|head -n $lucky_num|tail -1)
	#lucky_peron.txt是中过奖人的名单
    #将抽奖结果,输出重定向到/dev/null文件里,不输出到终端
	if ! grep $lucky_person lucky_person.txt &>/dev/null
    #只输出第一次中奖的人的名字,并将中奖同学的名字记录到lucky_person.txt文件中
	then
		echo "$lucky_person 中奖了"
		echo $lucky_person >>lucky_person.txt
	fi
	read -p "请输入任意键继续,按去q退出"   option
	if [[ $option == "q" || $option == "Q" ]]
	then
		break
	fi
	echo "中过奖的人的名单"
	echo "###################"
	cat lucky_person.txt
	echo "###################"
#判断是否所有的人都抽中奖了
	num2=$(cat lucky_person.txt|wc -l)
	if (($num == $num2))
	then
		echo "所有人都中奖了,退出重新开始"
		break

done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值