shell小技巧(十五)模拟抓阄

要求:
1、执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大机会越大,前面已经抓到的数字,下次不能在出现相同数字。
2、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入,抓完输入exit退出。
3、倒序输出
方法1:

#!/bin/bash

>chioce.txt

e="exit"

x=""

while [ $e == "exit" ]; do

   read -p "please input youname :" x

   grep "$x" chioce.txt 

   if [ $? -eq 0 ]; then

      echo "$x already in namelist,can't input again!"

      continue;

   fi

   if [ $x == $e ]; then

      echo "game over!"

      e=""

      break;

   fi

   f=1

   while [ $f -eq 1 ]; do 

     y=$[RANDOM%99+1]

     grep "$y" chioce.txt

     if [ $? -gt 0 ];then

       f=0

       break;

     fi

   done

     echo $y" "$x >> chioce.txt

     y=0

     x=""

     echo "next input!"

done

sort -nr chioce.txt


方法2:

#!/usr/bin/bash

declare -A arr

while true

do

    [ "$Name" = "quit" ] && break

    read -p "Please input you name: " Name

    while true 

    do

      Num=`echo $(($RANDOM%99+1))` 

  if [[ $Num =~ ${arr[*]} ]];then

          continue

      else

          arr[$Name]=$Num

          echo "$Name" "$Num"

          break

      fi

    done

done

for j in ${!arr[*]}

do

  echo $j " " ${arr[$j]} >> zhuajiu.txt

done

  sort -nr -k2 zhuajiu.txt|head -4 |column -t
总结:
方法1重点是如果重复的名称不会让再次输入一人一次机会,启动前情况目标文件,以确保只保存本次结果。
方法2(来自互联网的代码)保证一人一次的方法是如果重复输入,那么第二次输入会覆盖第一次,略有不公平。

发布了53 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/bigwood99/article/details/105097853
今日推荐