You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu Bash中删除文件中列出的用户

批量删除Ubuntu系统中指定文件列出的用户

你不需要用统计行数再循环的复杂方式,直接逐行读取文件内容是更可靠、简洁的实现方式。以下是完整的Bash脚本:

基础实现脚本

#!/bin/bash

# 检查目标文件是否存在
if [ ! -f "userstobedel.txt" ]; then
    echo "错误:文件userstobedel.txt不存在"
    exit 1
fi

# 逐行读取文件中的用户名并删除
while IFS= read -r username; do
    # 跳过空行,避免无效操作
    [ -z "$username" ] && continue
    
    # 执行删除操作,-r选项会同时删除用户的家目录和邮件文件,不需要则去掉-r
    userdel -r "$username"
    
    # 反馈删除结果
    if [ $? -eq 0 ]; then
        echo "成功删除用户:$username"
    else
        echo "删除用户$username失败"
    fi
done < "userstobedel.txt"

优化版(增加用户存在性检查)

如果要避免删除不存在的用户时的报错,可以提前验证用户是否存在:

#!/bin/bash

if [ ! -f "userstobedel.txt" ]; then
    echo "错误:文件userstobedel.txt不存在"
    exit 1
fi

while IFS= read -r username; do
    [ -z "$username" ] && continue
    
    # 检查用户是否存在
    if id "$username" &>/dev/null; then
        userdel -r "$username"
        if [ $? -eq 0 ]; then
            echo "成功删除用户:$username"
        else
            echo "删除用户$username失败"
        fi
    else
        echo "用户$username不存在,跳过"
    fi
done < "userstobedel.txt"

关键说明

  • 权限要求:必须以root用户执行,或用sudo运行脚本,因为userdel需要管理员权限
  • -r选项:该选项会删除用户的家目录、邮件池等关联数据,若需要保留这些内容,去掉-r即可
  • 可靠读取方式:while IFS= read -r是Bash中读取文件的标准可靠写法,能处理含空格的用户名,避免特殊字符导致的错误
  • 避免伪代码的问题:你的伪代码中用wc -l统计行数的方式存在隐患——如果文件最后一行没有换行符,统计结果会少1;逐行读取则完全没有这个问题,且实现更简洁

内容的提问来源于stack exchange,提问作者Vince G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:54:15