shell脚本批量创建用户

            有些面试题中会问到批量创建用户的题目,大体是用循环去进行创建,但有时也会有一些额外的附加条件,一起来看看今天的知识点吧。

需求:

1、自定义用户,不要有特殊字符:user01,user02

2、最多创建100个用户,要求数字等位对齐。例:1-99  01,02,03....99

3、输入用户名和用户数目时最多给予三次机会

4、创建随机的8位密码,大写两个数字三个没有特殊字符,并将用户名密码对应放到user_pass.txt中

分析:

1、创建自定义用户使用read -p 键盘输入即可,用户数目也一样

2、数字等位对齐seq -w number 可以实现

3、给予三次输入机会,在匹配不成功后做运算判断即可

4、创建随机的密码需要先安装expect工具,用法:mkpasswd -l 指定长度 -d 指定几个数字 -s 指定几个特殊字符 -C 指定几个大写字母

5、创建完成后将用户名和密码导入到user_pass.txt即可

脚本如下:

#!/bin/bash
##########
#user_add
#dingxiang
############
#创建用户三次机会
for i in `seq 3`
do
read -p "please enter creat user name: "  name
#如果name匹配a-Z0-9则跳出循环继续执行
        if [[ $name =~ [a-Z0-9] ]];then
                break
        else
#一共三次机会,3-$i,循环到第三次,运算结果为0则退出程序
                name_chance=`echo $[3-i]`
                if [ "$name_chance" == "0" ];then
                        echo "Number exhausted,please try again later"
                        exit
                else
                        echo "please enter realy user name,There's still $name_chance chance left"
                fi
        fi
done

#输入用户数量三次判断
for j in `seq 3`
do
read -p "please enter creat user number(1-100): " num
        if [[ $num =~ ^[1-9]$ ||  $num =~ ^[1-9][0-9]$  || $num =~ ^[1][0][0]$ ]];then
                        break
                else
#一共三次机会,3-$i,循环到第三次,运算结果为0则退出程序
                num_chance=`echo $[3-j]`
                if [ "$num_chance" == "0" ];then
                        echo "Number exhausted,please try again later"
                        exit
                else
                        echo "please enter realy user number(1-100),There's still $num_chance chance left"
                fi
        fi
done

#打印用户名和创建数量,给予最后确认。
printf "
        user-name: $name
        user-number: $num
"

#如果$cho为y则创建用户,否则退出程序
read -p "Are you sure to create user?(y/n): " cho
        if [ "$cho" == "y" ];then
                for u in `seq -w $num`
                do
#将要创建的用户名写成变量
                user=${name}${u}
#随机密码定义成变量
                pass=`mkpasswd -l 8 -d 3 -s 0 -C 2`
#检查用户是否存在,用户存在,返回码$?为0时,跳出本次循环。
                  id $user &>/dev/null
                        if [ $? -eq 0 ];then
                                echo "user $user already exists"
                                continue
                        else
#用户不存在的则创建用户,并且将用户名密码导入到user_pass.txt中
                                useradd $user
                                echo $pass | passwd --stdin $user &>/dev/null
                                echo "${user}___${pass}" >> user_pass.txt
                                echo "$user is creat ok......."
                        fi 
               done
#不需要创建用户,退出程序
        else
                echo "normal exit~"
                exit
        fi