本次shell脚本要实现的功能是:可以根据指定的用户名和密码进行批量创建、删除用户。

一、批量创建用户

1.原始版(不用进行判断)

思路:
1.用户的初始密码由read获取,-s 隐藏输入
2.用户名放在name.txt文件中,一行一个文件名
3.注意useradd和passwd的绝对路径不要写错,否则不会正常执行。

#!/bin/bash
read -s -p  "请输入初始密码:" pass
echo -e "\n"
name=$(cat /root/name.txt)
for i in $name
	do
	  /usr/sbin/useradd $i
	  echo $pass | /usr/bin/passwd --stdin $i
	done
2.进阶版(加上test判断)

原始版虽然可以基本实现需求,但也存在几个弊端:
(1)如果密码输错或为空,仍可以创建用户,不符合使用习惯
(2)用户无法自定义用户名以及数量,不灵活

为了改进上述缺陷,进阶版诞生

思路:
1.用户名、用户数量以及密码均从read获取;
2.只有三者输入不为空,才可继续执行,否则提示输入存在空字符
3.只有正确输入表示数字的用户数量,才可继续执行,否则提示无效的用户数量
4.最终用户名由输入的用户名以及规定的个数组成
如用户名为"root",规定数量为5,那么最终用户名就为root1-root5

#!/bin/bash
read -p "请输入用户名:" -t 30 name
read -p "请输入创建用户数量:" -t 30 num
read -s -p "请输入初始密码:" -t 30 pass

if [ ! -z "$name" -a ! -z "$sum" ! -z "$pass" ]
	then
	  y=$(echo $sum | sed 's/[0-9]//g')
	if [ -z "$y" ]
		then
		for ((i=1;i<=$num;i=i+1))
			do
			  /usr/sbin/useradd $name$i &> /dev/null
			  echo $pass | /usr/bin/passwd --stdin $name$I
			done
	else
		echo "无效的用户数量,请重试!"
	fi
else
	echo "输入存在空字符,请重试!"
fi  
3.最终版(企业级)

添加功能:
1.用户密码使用RANDOM随机生成
2.使用function内置函数显示创建用户成功或失败的过程

#!/bin/bash
. /etc/init.d/functions   #使用系统函数
user="ab" #定义用户名为ab
passfile="/tmp/user.log" #定义存放随机密码的文件位置
for num in `seq -w 3 5`  #声明用户名为ab3 ab4 ab5 ,并循环
	do
	pass="`echo "test$RANDOM"|md5sum|cut -c 3-11`"  #生成随机8位密码
	useradd $user$num &> /dev/null &&\  #&&\表示前一个执行正常了后一个才会执行
	echo "$pass"|passwd --stdin $user$num
	echo -e "user:$user$num\tpasswd:$pass" >>$passfile  #保存用户名以及密码信息
	if [ $? -eq 0 ]
		then
			action "$user$num is ok"  /bin/true
		else
			action "$user$num is fail" /bin/false  #使用系统function函数显示成功或失败结果
	fi
done
echo
cat $passfile && >$passfile   #创建完毕同时显示用户名以及密码信息
		

二、批量删除用户

基本思路:所有用户信息都在 /etc/passwd 文件中,而创建的普通用户的shell类型为 /bin/bash可以用grep以及cut命令抓取该shell类型的用户,再用userdel删除即可。

注意:root用户以及不想删除的普通用户要用 grep -v 反选过滤掉,否则你懂的。

#!/bin/bash
user=$(cat /etc/passwd | grep "/bin/bash" | grep -v "root" |cut -d ":" -f 1)  #截取要删除的用户名
for i in $user
	do
	  userdel -r $i  #删除目录及文件
	done
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐