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