-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlucky.sh
60 lines (55 loc) · 1.24 KB
/
lucky.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#! /usr/bin/bash
lucky(){
# 读取每一行到数组
local arr=();
while read -a line
do
arr+=(${line[@]});
done;
# 如果无人抽奖
if ((${#arr[@]}<=0))
then
printf "\e[31m %s\n \e[0m" "无人抽奖!";
exit;
fi;
# 抽奖人数判断
local num=1;
if [ ! $1 ]
then
num=1;
elif (($1<=0))
then
printf "\e[31m %s\n \e[0m" "获奖人数应大于0!";
exit;
elif (($1>${#arr[@]}))
then
printf "\e[31m %s\n \e[0m" "获奖人数应小于总人数!";
exit;
elif (($1>0&&$1<=${#arr[@]}))
then
num=$1;
fi;
# 外层循环代表抽取 num 次,内层循环代表每次抽到谁
local i=0;
local result=();
while ((i<num))
do
# 表示抽取到了数组的第几个
local count=$(($RANDOM%${#arr[@]}));
for key in ${!arr[@]}
do
if ((count==0))
then
result+=(${arr[key]});
unset arr[key];
break;
fi;
let "count--";
done;
let "i++";
done;
# 输出结果数组
printf "\e[32m %s\n \e[0m" "获奖者:${result[*]}";
}
# 函数体执行
lucky $1;