从 .csv 文件创建用户

从 .csv 文件创建用户

.csv我正在尝试使用 bash 脚本从文件导入数据来创建用户。我了解基础知识,bash但我对使用循环创建此脚本感到困惑。其模板如下.csv

Surname,Name,Username,Department,Password

答案1

这应该对您有用,或者至少可以帮助您找到正确的方向:

#! /usr/bin/env bash -
#set -x

MY_INPUT='/root/temp/input'
declare -a A_SURNAME
declare -a A_NAME
declare -a A_USERNAME
declare -a A_DEPARTMENT
declare -a A_PASSWORD
while IFS=, read -r COL1 COL2 COL3 COL4 COL5 TRASH; do
    A_SURNAME+=("$COL1")
    A_NAME+=("$COL2")
    A_USERNAME+=("$COL3")
    A_DEPARTMENT+=("$COL4")
    A_PASSWORD+=("$COL5")
done <"$MY_INPUT"

for index in "${!A_USERNAME[@]}"; do
    useradd -g "${A_DEPARTMENT[$index]}" -d "/home/${A_USERNAME[$index]}" -s /bin/bash -p "$(echo "${A_PASSWORD[$index]}" | openssl passwd -1 -stdin)" "${A_USERNAME[$index]}"
done

while循环将读取您的csv文件并为每一列创建数组。该TRASH值用于收集csv文件中可能存在的任何其他字段。否则,如果你有这样的例子:surname,name,username,department,password,anextrafield

COL5将被设置为:passwordanextrafield

无论如何,我认为设置数组对您来说可能不是必需的(因为您可能只是在 while 循环内创建用户),但我想以这种方式展示我已经学会了如何循环遍历分隔文件。

之后for循环将遍历A_USERNAME数组的索引值(可以是任何数组)并对它们进行操作以创建用户。

useradd

  1. -g "${A_DEPARTMENT[$index]}"
    • 这会将新创建的用户添加到以其部门命名的组中(注意:该组必须已经存在,否则命令将出错)
  2. -d "/home/${A_USERNAME[$index]}"
    • 这会将新创建的用户的主目录设置为/home/[USERNAME]
  3. -s /bin/bash
    • 将新创建的用户的登录 shell 设置为/bin/bash
  4. -p "$(echo "${A_PASSWORD[$index]}" | openssl passwd -1 -stdin)"
    • 从 csv 中获取密码并使用 openssl 生成 MD5 密码
  5. "${A_USERNAME[$index]}"
    • 要创建的用户。

相关内容