.csv 파일에서 사용자 생성

.csv 파일에서 사용자 생성

.csvbash 스크립트를 사용하여 파일에서 데이터를 가져와 사용자를 생성하려고 합니다. 기본 사항은 이해 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
    • 새로 생성된 사용자의 로그인 셸을 다음으로 설정합니다./bin/bash
  4. -p "$(echo "${A_PASSWORD[$index]}" | openssl passwd -1 -stdin)"
    • csv에서 비밀번호를 가져오고 openssl을 사용하여 MD5 비밀번호를 생성하세요.
  5. "${A_USERNAME[$index]}"
    • 생성할 사용자입니다.

관련 정보