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语句,以免无故增加执行时间。