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

 

 

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