【shell综合使用4】批量删除用户

如果有大量的用户一个一个删除会很麻烦,对此写一个shell脚本批量删除

综合使用3我们说到了批量创建用户,对于有这种规则的创建用户,那么就可以有批量的删除用户.

本次程序运行结果如下:

 思路与创建时基本相同,先指定删除范围,然后提示成功失败,最后累计显示

1.首先依然是stty erase ^H可以让用户输入时候退格

2.获取用户的输入并定义两个变量,同时赋值给起始:i 和终止:e

3.定义累计变量 count=0,error=0,目的在于输出时显示

4.写入循环,此处用的for循环

5.为了达到筛选信息,寻找系统下是否存在该用户,需要调用/etc/passwd文件,对此为了避免vim可以使用awk,其中awk的语法为:awk options 'BEGIN{proggram}END' FILENAME 其中BEGIN和END可以省略

awk -F ':' '$1=="user_'$i'"{print "user_'$i'"}' /etc/passwd

-F 为指定数据字段的分隔符默认为空格,此处在/etc/passwd下,所以是引号

$1=="user_x"为匹配第一列为user_x的数据,此处为循环内的所以要用''号来括起变量,否则会运行不出来,pirnt后面也一样 最后接上 文件路径

比如循环如果运行到了第4次,此时$i为4,如下,输出结果为user_4,但输出内容只与匹配到了后执行print 后面一致,可以改成1或其他,那么下面的判断也会改动

[root@ice shfile]# awk -F ':' '$1=="user_'4'"{print "user_'4'"}' /etc/passwd
user_4

 6.判断: 把上面的命令赋值给变量con,定义个var=user_$i后可以进行两者之间的判断,如果相等则说明用户存在,则执行删除 注意此时删除应用userdel -r 不写-r是删除不了其用户的家目录的,其中将执行的结果 2>/dev/null,  2表示如果执行不正确,就>(重定向)放入/dev下的null中,null为'黑洞',所有的东西重定向到此处会消失,如果不写这条系统会先于你执行报错,删除的用户不存在,此时else就执行不到,从而失去了统计意义.

if [ "$con" == "$var" ];then
        userdel -r user_$i 2>/dev/null
        echo -e "\033[32m"已成功将user_$i删除"\033[0m"
        let count++
else
        echo -e "\033[35m"user_$i不存在"\033[0m"
        let error++
fi

7.然后我们用绿色字体显示成功,红色显示失败

8.最后统计结果

echo -e "总共删除了\033[33m`echo "1+$e-$s"|bc` \033[0m个用户,成>功\033[32m"$count"\033[0m个,失败\033[35m"$error"\033[0m个"

完整代码如下:

#!/bin/bash
stty erase ^H
read -p "删除user_的起始序号:" i
s=$i
read -p "终止序号:" e
count=0
error=0
for(( i;i<=e;i++ ))
do
var=user_$i
con=`awk -F ':' '$1=="user_'$i'"{print "user_'$i'"}' /etc/passwd`
if [ "$con" == "$var" ];then
        userdel -r user_$i 2>/dev/null
        echo -e "\033[32m"已成功将user_$i删除"\033[0m"
        let count++
else
        echo -e "\033[35m"user_$i不存在"\033[0m"
        let error++
fi
done
echo -e "总共删除了\033[33m`echo "1+$e-$s"|bc` \033[0m个用户,成功\033[32m"$count"\033[0m个,失败\033[35m"$error"\033[0m个"

猜你喜欢

转载自blog.csdn.net/qq_53521409/article/details/126589461
今日推荐