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