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是否存在,避免无意义的执行 - 跳过无效行:忽略空行和注释行,避免解析错误
- 重复用户检测:避免重复创建已存在的用户,防止冲突
- 组自动创建:如果用户所属的组不存在,自动创建(你也可以改成如果组不存在就报错,根据需求调整)
- 日志记录:所有操作结果都会写入日志文件,方便后续排查问题
- 错误处理:每一步关键操作都检查返回值,及时提示错误
使用注意事项:
- 确保
users.txt里的UID是未被占用的,否则useradd会失败 - 登录Shell必须是系统中存在的(比如
/bin/bash、/bin/nologin),可以用cat /etc/shells查看可用Shell - 如果需要给用户设置初始密码,可以取消脚本中
chpasswd那一行的注释,或者改成从密码文件读取(注意密码文件的权限要设为600,避免泄露) - 测试的时候可以先拿一两个用户做测试,没问题再批量执行
内容的提问来源于stack exchange,提问作者Kusa
相关产品推荐
相关产品推荐

