Shell脚本 批量添加和删除用户
本次shell脚本要实现的功能是:可以根据指定的用户名和密码进行批量创建、删除用户。一、批量创建用户1.原始版(不用进行判断)思路:1.用户的初始密码由read获取,-s 隐藏输入2.用户名放在name.txt文件中,一行一个文件名3.注意useradd和passwd的绝对路径不要写错,否则不会正常执行。#!/bin/bashread -s -p"请输入初始密码:" passecho -e "\n
本次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
更多推荐
所有评论(0)