Shell--點名器腳本,實現點名去重。

1、創建user.txt文本文件,存儲格式爲:用戶 密碼;以這些用戶爲基礎實現點名,下面文件存儲了20個用戶。

 2、具體腳本如下,下面一句一句解釋:

#!/bin/bash

user_arr=(`cat /root/100_sh/user.txt | awk '{ print $1}'`)
user_res=()
i=0
while [ $i -lt $1 ]
do
        user=${user_arr[$RANDOM%20]}
        res=`echo ${user_res[@]} |grep $user`
        if [ ! -n "$res" ]; then
                user_res[$i]=$user
                let i++
        fi
done

for user in ${user_res[@]}
do
        echo -n "$user "
        sleep 0.8
done
echo

user_arr=(`cat /root/100_sh/user.txt | awk '{ print $1}'`)

 定義user_arr數組;`執行的命令`;cat /root/100_sh/user.txt 讀取指定文件;| awk '{ print $1} 對於讀取的指定文件,按行分析,awk默認以空格作爲分隔符,{print $1}輸出分隔後的第一個值,也就是用戶名。這樣,解析指定文件,拿到用戶數組。

user_res=()

初始化結果數組,用來存儲隨機名字,爲空。

i=0

while [ $i -lt $1 ]

do  ...

done

在執行腳本時候,會傳入一個數字作爲參數,也就是點名的人數;while [ $i -lt $1 ] 初始i=0,進行while循環,直到點名人數滿足給定的人數值。

user=${user_arr[$RANDOM%20]}

$RANDOM%20產生0--19之間的隨機數,在user_arr中取一值存於變量user。

res=`echo ${user_res[@]} |grep $user`

echo ${user_res[@]}首先輸出結果數組,匹配上一步隨機值,存在的話返回整個數組,不存在的返回null,存於變量res。

if [ ! -n "$res" ]; then

done

如果變量res爲空,也就是結果數組中沒有隨機值。

user_res[$i]=$user

將隨機值存於結果數組

let i++

計數變量+1

for user in ${user_res[@]}
do
        echo -n "$user "
        sleep 0.8
done
echo

變量結果數組,每隔0.8秒輸出一個值,最後換行輸出。

3、執行腳本,時限隨機點名10人。

當然,要是將結果重定向至文件,如:bash 24_call_name.sh 10 >res,建議去掉sleep語句,以免無故增加執行時間。

 

 

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