Isso deve funcionar para você ou pelo menos ajudá-lo a seguir na direção certa:
#! /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
O loop while
lerá o arquivo csv
e criará matrizes para cada coluna. o valor TRASH
está lá para coletar quaisquer campos adicionais que possam estar no seu arquivo csv
. Caso contrário, se você tivesse isso, por exemplo: surname,name,username,department,password,anextrafield
COL5
seria definido como: passwordanextrafield
Independentemente disso, acho que configurar as matrizes pode não ser necessário para você (como você poderia criar seus usuários apenas dentro do loop while), mas eu queria mostrar dessa maneira que aprendi a trabalhar com o loop através de um arquivo delimitado.
Após o loop for
ser executado pelos valores de índice do array A_USERNAME
(poderia ter sido qualquer um dos arrays) e agir sobre eles para criar usuários.
useradd
-
%código%
- Isso adicionará o usuário recém-criado a um grupo com o nome do departamento (nota: esse grupo já deve existir ou o comando terá erro)
-
%código%
- Isso definirá o diretório inicial do usuário recém-criado como
-g "${A_DEPARTMENT[$index]}"
- Isso definirá o diretório inicial do usuário recém-criado como
-
%código%
- Defina o shell de login do usuário recém-criado como
-d "/home/${A_USERNAME[$index]}"
- Defina o shell de login do usuário recém-criado como
-
%código%
- Obtém a senha do seu csv e usa o openssl para gerar uma senha MD5 com ela
-
%código%
- O usuário para criar.