因此需要挑选学生,因此需要一个抓阄的程序:
要求:1、执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。2、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入。 #!/bin/bash while true;do echo -e "\e[1;31m退出请输入:exit \e[0m" read -e -p "ples input you name(拼音):" name name1 ##判断是否退出程序 [ "$name" == "exit" ]&& exit 0 ##判断输入的用户名是否符合以下规则 echo $name|grep ^[A-Za-z]*$ &>/dev/null #判断是否字母 [ $? -ne 0 ] && { clear echo -e "\e[1;33m 请输入拼音名!! \e[0m \n" continue } #名字不能为空 [ -z $name ] && { clear echo -e "\e[1;33m 名字不能为空!! \e[0m \n" continue } #不能有第二个名字参数 [ ! -z $name1 ] && { clear echo -e "\e[1;33m 请输入正确的名字!! \e[0m \n" continue } [ ! -f b.txt ] && touch b.txt ##循环列表检查用户名是否存在,存在则重新输入。 filename=`awk '{print $1}' b.txt` RAT1=Fasle for i in $filename;do if [ "$i" == "$name" ];then clear echo -e "\e[1;33m 用户名($name)已经存在,不能输入第二次!! \e[0m \n" RAT1=True break fi done [ "$RAT1" == "True" ]&&{ continue } ##判断文件中是否已经存在的数字就不能在次添加,直到是文件中没有的数字。 while true;do #判断是否已经达到99个数字了 [ `cat b.txt|wc -l` -eq 99 ] && { echo -e "\e[1;33m 数字已经输完!! \e[0m \n" break } num=`echo $(($RANDOM%100))` #如果是0或100就重新取值 [ $num -eq 0 -o $num -eq 100 ] && continue filenum=`awk '{print $2}' b.txt` RAT=True for i in $filenum;do if [ $i -eq $num ];then RAT=False break fi done if [ $RAT == "True" ];then clear echo -e "\e[1;33m $name: $num \e[0m \n" echo "$name $num" >> b.txt break fi done done