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

如何在bash中使用awk为新创建的用户从文本文件分配对应密码

代码修正方案

原代码存在的问题

  • 密码提取的awk语法错误,存在多余的嵌套print和错位括号,无法正常提取第三列密码字段
  • 用户名数组、密码数组分开存储,遍历时没有匹配对应索引,会导致所有用户都使用同一个密码
  • useradd的-p参数要求传入加密后的密码字符串,直接传入明文密码会导致后续用户无法正常登录
  • 缺少用户组、用户存在性校验,重复执行脚本会抛出创建失败的报错

修正后的完整代码

#!/bin/bash
PATH_EMPLOYEE_FILE="employeelist"
groupname="group1"

# 提前校验目标用户组是否存在,不存在则创建
if ! getent group "${groupname}" > /dev/null; then
    groupadd "${groupname}"
    echo "用户组 ${groupname} 已创建"
fi

# awk直接拼接生成用户名+对应密码,逐行处理避免索引错位
awk '{print substr($1,1,1) $2 substr($3,length($3)-3,4) " " $3}' "${PATH_EMPLOYEE_FILE}" | while read -r username password; do
    # 校验用户是否已存在
    if id "${username}" > /dev/null 2>&1; then
        echo "用户 ${username} 已存在,跳过创建"
        continue
    fi
    # 创建用户
    useradd -m -G "${groupname}" "${username}"
    # 用chpasswd批量设置明文密码,无需额外处理加密逻辑
    echo "${username}:${password}" | chpasswd
    echo "用户账户创建完成: ${username}"
done

关键调整说明

  • 优化awk处理逻辑,直接输出拼接后的用户名和对应密码,逐行读取处理完全避免用户与密码匹配错位的问题
  • 替换useradd -p明文传参的错误写法,用chpasswd设置密码更简单稳妥,适合批量操作场景
  • 新增用户组、用户存在性校验,避免重复执行脚本时报错
  • 简化用户名拼接逻辑,substr($3,length($3)-3,4)直接取密码后4位,写法更简洁规范
  • 若场景要求必须使用useradd -p参数,可将密码处理逻辑替换为encrypted_pwd=$(openssl passwd -6 "${password}"),传入加密后的密码字符串即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 09:06:02