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 指定几个大写字母
#!/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