今日小练题目📢
多人抽签游戏,每人执行脚本产生一个随机数,具体要求如下
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中调用脚本内的函数