[shell script] 입력 리다이렉션을 이용해 여러 명의 사용자 한번에 생성하기

HYEOB KIM·2022년 4월 21일
0

Shell

목록 보기
32/71

입력 리다이렉션을 이용해 여러 명의 사용자에 대한 정보가 적힌 파일을 입력받아 사용자를 한 번에 생성해보는 코드 실습을 해보겠습니다.

먼저 users.csv라는 파일에 사용자에 대한 정보들을 입력합니다.
(쉼표를 기준으로 userid, name입니다)

$ cat users.csv
rich, Richard Blum
christine, Christine Bresnahan
barbara, Barbara Blum
tim, Timothy Bresnahan

스크립트의 내용은 아래와 같습니다.

$ cat test1
#!/bin/bash
input="users.csv"
while IFS=, read -r userid name
do
        echo "adding $userid"
        sudo useradd -c "$name" -m $userid
done < $input

코드 리뷰

  • IFS를 통해 ,를 기준으로 필드를 구분하도록 합니다.
  • done 옆의 입력 리다이렉션을 통해 users.csv의 파일 내용을 읽어들이고, ,를 기준으로 구분한 뒤 0열을 userid, 1열을 name의 변수에 넣어 조회합니다.
  • read -r 옵션은 raw 모드로 백슬래시를 포함한 모든 이스케이프 문자를 있는 그대로 읽어들인다는 것을 의미합니다.
  • useradd 명령은 루트 권한이 필요하므로 sudo를 붙였습니다.
  • useradd -c "<comment>" : 사용자를 생성할 때 코멘트를 입력하는 옵션입니다. 반드시 큰따옴표 안에 코멘트를 적습니다.
  • useradd -m <userID> : 사용자를 생성할 때 홈 디렉토리를 생성한다는 옵션입니다.

스크립트를 실행시켜 보겠습니다.

$ ./test1
adding rich
adding christine
adding barbara
adding tim

$ cat /etc/passwd | tail -5
git:x:1001:1001::/home/git:/usr/bin/git-shell
rich:x:1002:1002: Richard Blum:/home/rich:/bin/sh
christine:x:1003:1003: Christine Bresnahan:/home/christine:/bin/sh
barbara:x:1004:1004: Barbara Blum:/home/barbara:/bin/sh
tim:x:1005:1005: Timothy Bresnahan:/home/tim:/bin/sh

4명의 유저가 추가로 생성된 것을 확인할 수 있습니다.

생성한 유저를 지워보겠습니다.

$ cat test1
#!/bin/bash
input="users.csv"
while IFS=, read -r userid name
do
        echo "deleted $userid"
        sudo userdel -r $userid
done < $input

코드 리뷰

  • userdel -r : 사용자와 연관된 홈 디렉토리와 메일 스풀까지 모두 지우겠다는 옵션입니다.

스크립트를 실행해 보겠습니다.

$ ./test1
deleted rich
userdel: rich mail spool (/var/mail/rich) not found
deleted christine
userdel: christine mail spool (/var/mail/christine) not found
deleted barbara
userdel: barbara mail spool (/var/mail/barbara) not found
deleted tim
userdel: tim mail spool (/var/mail/tim) not found

$ cat /etc/passwd | tail -5
sshd:x:112:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
hyeob:x:1000:1000:hyeob:/home/hyeob:/bin/bash
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
git:x:1001:1001::/home/git:/usr/bin/git-shell

사용자와 홈 디렉토리까지 모두 지워졌습니다.
(사용자에 대한 메일 스풀이 없기 때문에 찾지 못했다는 문구가 뜹니다)

profile
Devops Engineer

0개의 댓글