.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
- 새로 생성된 사용자의 로그인 셸을 다음으로 설정합니다.
/bin/bash
- 새로 생성된 사용자의 로그인 셸을 다음으로 설정합니다.
-p "$(echo "${A_PASSWORD[$index]}" | openssl passwd -1 -stdin)"
- csv에서 비밀번호를 가져오고 openssl을 사용하여 MD5 비밀번호를 생성하세요.
"${A_USERNAME[$index]}"
- 생성할 사용자입니다.