玩轉shell-shell抽獎程序(github源碼)


在這裏插入圖片描述

前言

此篇博文做 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 中寫有非常詳細的項目介紹和使用說明,並且支持中英雙譯哦!

在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章