【shell一天一练】多人抽签游戏

164 阅读1分钟

今日小练题目📢

多人抽签游戏,每人执行脚本产生一个随机数,具体要求如下

1)脚本执行后,输入人名,产生1-99之间的数字;

2)相同的名字重复执行,抓到的数字应该和之前保持一致;

3)前面已经出现过的数字,下次不能再出现;

4)需要将名字和对应的数字记录到一个文件里;

5)脚本一旦运行,除非按Ctrl+C停止,否则要一直运行。

优秀作业🤌🏻

#!/bin/bash
#author: xYLiuuuuuu
#date:2024-12-09


create_number()
{
        while :
        do
                nu=$[$RANDOM%99+1]

                n=`awk -F ':' -v NUMBER=$nu '$2 == NUMBER' /tmp/name.log|wc -l`
                if [ $n -gt 0 ]
                then
                        continue
                else
                        echo $nu
                        break
                fi
        done
}

while :
do
        read -p "Please input a name:" name

        if [ ! -f /tmp/name.log ]
        then
                number=$[$RANDOM%99+1]
                echo "Your number is: $number"
                echo "$name:$number" > /tmp/name.log
        else
                n=`awk -F ':' -v NAME=$name '$1 == NAME' /tmp/name.log|wc -l`
                if [ $n -gt 0 ]
                then
                        echo "The name already exist."
                        awk -F ':' -v NAME=$name '$1 == NAME' /tmp/name.log
                        continue
                else
                        number=`create_number`
                fi
                echo "Your number is: $number"
                echo "$name:$number" >> /tmp/name.log
        fi
done

敲黑板📝

  • read -p 和用户进行交互
  • 看一个文件是否存在 if [ ! -f file ]
  • $RANDOM%99+1 控制随机数在0-99之间
  • awk -F ':' -v NAME=$name '$1 == NAME' /tmp/name.log 因为awk命令中$符号有特殊含义,所以要把变量赋值给另一个变量,中间转化一下
  • 反引号把函数名括起来,是在shell中调用脚本内的函数