각 사용자에 대한 계정을 만들고 텍스트 파일에서 해당 그룹에 사용자를 추가합니다.

각 사용자에 대한 계정을 만들고 텍스트 파일에서 해당 그룹에 사용자를 추가합니다.

username.txt사용자 이름과 특정 그룹이 포함된 파일이 있습니다 . 현재 저는 각 사용자에 대한 계정을 생성하고 단일 명령으로 해당 사용자를 해당 그룹에 추가할 수 있는 bash 스크립트를 생성하려고 합니다.

이것은 현재 실패한 bash 스크립트입니다.

#!/bin/bash

sudo addgroup staff
sudo addgroup visitors

username="username.txt"

while read line; do
sudo useradd $-Eo '^[^,]+' $username;
if [grep staff $username]; then
  sudo usermod -a -G staff
else
  sudo usermod -a -G visitors
done < $username

내 파일에 있는 내용은 다음과 같습니다 username.txt.

ellipsiscoterie,visitor
magnetcommonest,visitor
belateddefensive,staff
bobstercaramelize,staff

답변1

이것을 해결책으로 시도해 보십시오. 쉼표로 구분된 파일을 사용하고 있으므로 한 번에 두 개 이상의 그룹을 사용하려는 것으로 가정합니다. 당신이 하고 있는 일이 완전히 잘못된 것은 아니지만, if else더 많은 그룹이 필요할 경우 다시 작성해야 하므로 이 경우에는 사용하지 않을 것입니다. 그룹 생성도 루프 내에서 처리됩니다.

#!/bin/bash
while read config
do
        USERTOCREATE=$(awk -F, '{print $1}' <(echo "$config"))
        GROUPTOASSIGN=$(awk -F, '{print $2}' <(echo "$config"))
        if [[ ! $(groups) =~ $GROUPTOCREATE ]]; then addgroup $GROUPTOASSIGN; fi
        useradd $USERTOCREATE
        usermod -a -G $GROUPTOASSIGN
done < users

while이 코드는 두 개의 변수를 사용 USERTOCREATE하고 awk를 사용하여 할당하는 간단한 루프입니다 GROUPTOASSIGN. -F,awk의 플래그는 필드 구분 FS변수를 쉼표로 설정합니다. 이를 통해 awk는 입력을 변수 $1과 $2로 분할할 수 있습니다. 당신이 이것에 익숙할지 잘 모르겠지만 이것은 파일의 출력을 파일로 <()처리할 수 있게 해주는 파일 설명자입니다 . 스크립트가 읽고 있는 파일의 줄만 있으면 됩니다.echo "$config"$config

답변2

#!/bin/bash
i=0

n=$(wc -l <username.txt)
while [ $i -le $n ]
do
        L=$(awk "NR==$i" username.txt)
        if [ -n "$L" ]; then
                user=$(echo "$L" | cut -d',' -f1)
                group=$(echo "$L" | cut -d',' -f2)
                useradd $user
                groupadd $group
                usermod -a -G $group $user
        fi

i=$((i+1))
done

답변3

username.txt필드 구분 기호를 사용하여 한 줄씩 구문 분석 할 수 있습니다 ,.

#!/bin/bash
sudo addgroup staff
sudo addgroup visitors

while IFS=, read -r username maingroup
do
   sudo adduser --ingroup "$maingroup" "$username"
done < username.txt

이는 쉼표로 구분된 토큰을 쉘 변수로 읽고 $username명령 을 실행하여 기본 그룹이 있는 사용자를 $maingroup생성합니다 .adduser$username$maingroup

관련 정보