题目:让10个人进行抓阄,取前三名。
要求:
1、执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,
数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。
2、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出
继续等待别的学生输入。
#!/bin/bash
#Author:cxs
#QQ:981071195
#Time:2020-11-25 15:40:34
#Name:zhuajiu.sh
#Version:V1.0
#Description:This is a test script.
export LANG="zh_CN.UTF-8"
PATH_FILE=/tmp/zhuajiu.log
count=0
cat <<END
======================================
1.开始游戏
2.退出游戏
======================================
END
wait_time(){
for((i=0;i<3;i++))
do
echo -n "."
sleep 1
done
echo
}
start_game(){
read -p "请输入你的英文名:" name
if [ ! -e "$PATH_FILE" ];then
touch "$PATH_FILE"
fi
[ `echo $name | sed 's/[a-Z]//g'| wc -L` -ne 0 ] && { #判断输入的是否是英文名称
echo "乖!别调皮"
start_game
}
if [ `awk -F ":" '{print $1}' $PATH_FILE |grep "^${name}$"| wc -l` -ne 0 ];then #判断是否输入了相同的名称
echo "滚!你已经玩过一遍了。让下一个人来"
start_game
fi
}
judge(){
TEMP=$((RANDOM%99+1)) #获取一个随机值
if [ `grep '/$TEMP/' $PATH_FILE | wc -l` -ne 0 ];then #判断随机值是否已经存在
judge
else
echo "$name:$TEMP" >> "$PATH_FILE"
fi
}
analyse(){
echo "幸运儿是以下三位:"
[ ! -e /tmp/temp.txt ] && touch /tmp/temp.txt
awk -F ":" '{print $2}' $PATH_FILE | sort -hr| head -3 >/tmp/temp.txt #按照抓阄的数值进行排序,取前三名
cat /tmp/temp.txt | while read line #通过数值再把对应的名称找出来并输出再屏幕上
do
echo `grep "$line" "$PATH_FILE"`
done
}
main(){
echo "请根据提示操作,不要来些骚操作!"
read -p "请输入相应数字:" num
while ((count<10))
do
case $num in
1)
start_game
judge
((count++)) #记录有几个人已经抓过阄了
wait_time
echo "下一位"
;;
2)
break
;;
esac
done
[ "$count" -eq 10 ] &&{
analyse
exit 0
}||{
echo "人数不够无法出成绩,让剩下的人来填写"
main
}
}
main
执行结果: