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語句,以免無故增加執行時間。