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

Ubuntu系统批量添加用户求助:基于users.txt的Bash脚本实现

别担心,批量添加用户这个需求其实很常见,咱们一步步来搞定它!

首先得先把users.txt的格式定好——脚本要能准确读取每一项配置,我推荐用**逗号分隔(CSV)**的格式,每一行对应一个用户,字段顺序统一成:
用户名,UID,所属组,用户全名,主目录,登录Shell

举个users.txt的示例:

alice,1001,devops,Alice Smith,/home/alice,/bin/bash
bob,1002,marketing,Bob Johnson,/home/bob,/bin/bash
charlie,1003,finance,Charlie Brown,/home/charlie,/bin/nologin

接下来是核心的Bash脚本,我会加上详细注释,方便你理解每一步的作用:

#!/bin/bash

# 检查是否以root身份运行,添加用户需要root权限
if [[ $EUID -ne 0 ]]; then
   echo "错误:请以root用户运行此脚本!" 
   exit 1
fi

# 检查users.txt文件是否存在
USER_FILE="users.txt"
if [[ ! -f $USER_FILE ]]; then
    echo "错误:找不到文件 $USER_FILE!"
    exit 1
fi

# 日志文件,记录操作结果
LOG_FILE="user_addition.log"
echo "用户批量添加日志 - $(date)" > $LOG_FILE

# 逐行读取用户文件
while IFS=, read -r username uid group fullname homedir shell; do
    # 跳过空行和注释行(以#开头的行)
    if [[ -z $username || $username == \#* ]]; then
        continue
    fi

    echo "正在处理用户:$username..."

    # 检查用户是否已存在
    if id "$username" &>/dev/null; then
        echo "警告:用户 $username 已存在,跳过!" | tee -a $LOG_FILE
        continue
    fi

    # 检查组是否存在,不存在则自动创建
    if ! getent group "$group" &>/dev/null; then
        echo "组 $group 不存在,正在创建..."
        groupadd "$group"
        if [[ $? -ne 0 ]]; then
            echo "错误:创建组 $group 失败!" | tee -a $LOG_FILE
            continue
        fi
    fi

    # 使用useradd命令添加用户,带上所有参数
    useradd -u "$uid" -g "$group" -c "$fullname" -d "$homedir" -s "$shell" "$username"

    # 检查添加是否成功
    if [[ $? -eq 0 ]]; then
        echo "成功添加用户:$username" | tee -a $LOG_FILE
        # 可选:如果需要设置初始密码,可以在这里添加passwd命令,比如从文件读取密码或者生成随机密码
        # echo "$username:initialpass" | chpasswd
    else
        echo "错误:添加用户 $username 失败!" | tee -a $LOG_FILE
    fi

done < "$USER_FILE"

echo "批量添加用户操作完成,详情请查看日志:$LOG_FILE"

脚本关键说明:

  • 权限检查:开头先确认是root用户,避免因权限不足导致失败
  • 文件校验:先检查users.txt是否存在,避免无意义的执行
  • 跳过无效行:忽略空行和注释行,避免解析错误
  • 重复用户检测:避免重复创建已存在的用户,防止冲突
  • 组自动创建:如果用户所属的组不存在,自动创建(你也可以改成如果组不存在就报错,根据需求调整)
  • 日志记录:所有操作结果都会写入日志文件,方便后续排查问题
  • 错误处理:每一步关键操作都检查返回值,及时提示错误

使用注意事项:

  1. 确保users.txt里的UID是未被占用的,否则useradd会失败
  2. 登录Shell必须是系统中存在的(比如/bin/bash、/bin/nologin),可以用cat /etc/shells查看可用Shell
  3. 如果需要给用户设置初始密码,可以取消脚本中chpasswd那一行的注释,或者改成从密码文件读取(注意密码文件的权限要设为600,避免泄露)
  4. 测试的时候可以先拿一两个用户做测试,没问题再批量执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:09:27