前言
此篇博文做 shell 抽獎程序的介紹,有幾種類型的抽獎程序,請見如下
環境
- bash shell 3
- centos 7
- vim 編輯器
代碼
抽獎程序一
這個抽獎程序要求需要經過多輪抽獎並顯示每輪的結果,每輪儘量篩除一半的人,最後一輪只留下一人,最後一人就是獲獎者
#! /bin/bash
# 循環讀取多行數據
chouJiang(){
while read -a line
do
arr+=(${line[@]});
done;
# 若沒有抽獎人
if((${#arr[@]}==0))
then
printf "無人抽獎!\n";
exit;
fi;
# 記錄抽獎輪次
count=0;
printf "\033[;32m \t%s \033[0m" "抽獎人員有:";
printf "${arr[*]}\n";
# 抽獎進行多輪次循環
while((1))
do
# 程序最終出口
if((${#arr[@]}<=1))
then
printf "\033[;32m \n\t%s \033[0m\033[;31m %s\n \033[0m" "經過$count輪抽獎,最終獲獎者:" "${arr[0]}";
break;
fi;
# 每輪開始的初始操作
result=();
let "count++";
printf "\033[;32m \t%s \033[0m" "第$count輪抽獎:";
# 當前輪次抽取 arr 數組中的人
for i in ${!arr[@]}
do
# 通過隨機數看是否選出他,若選中就保存到 result 數組
if((RANDOM%2==0))
then
result+=(${arr[$i]});
fi;
done;
# 若誰都沒被選到就重抽
if((${#result[@]}!=0))
then
# 輸出當前輪次被選到的人
printf "\033[;33m %s\n \033[0m" "${result[*]}";
arr=(${result[@]});
else
printf "無人抽中,再來一次\n";
fi;
done;
}
抽獎程序二
這個抽獎程序要求只用顯示最後獲獎者,傳一個參數表示有幾個人獲獎
#! /bin/bash
chouJiang{
while read -a line
do
arr+=(${line[@]});
done;
if((${#arr[@]}<$1))
then
printf "\033[;31m %s\n \033[0m" "輸入異常,結束!";
exit;
fi;
# 數組長度
size=${#arr[@]};
# 輪次
count=0;
# count 輪循環,每次取一人
while((count<$1))
do
index=$((RANDOM%size));
while [[ ! ${arr[index]} ]]
do
index=$((RANDOM%size));
done;
result+=(${arr[index]});
unset arr[index];
((count++));
done;
# 輸出獲獎者
printf "\033[;32m %s\n \033[0m" "${result[*]}";
}
終極版抽獎程序三
這一版本抽獎程序是經過了最終優化的,該版本 bash 編寫的抽獎程序已經發佈於 github 上,並且其中已經提供了抽獎成員名單,你不用這個現成的名單也可以,用自己的也行,bash 編寫的抽獎項目 github 地址如下:
github:lottery4bash
需要的童鞋們可以自取,可以用於臨時隨機的抽獎,支持抽一人和抽多人。只用將這個 lucky.sh 拷貝到自己的服務器中,需要的時候一用即可,README.md 中寫有非常詳細的項目介紹和使用說明,並且支持中英雙譯哦!