[shell script] IFS를 이용한 /etc/passwd 정보 파싱

내부 필드 구분자인 IFS를 적절히 정의해서 /etc/passwd의 정보를 파싱해서 한 줄 씩 출력해봅시다.

먼저 /etc/passwd의 내용을 살펴봅시다.

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/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

위와 같이 각 사용자가 줄바꿈을 기준으로 구분되어 있고,
사용자 정보는 :을 기준으로 구분되어 있습니다.

각 사용자 별로 파싱을 하는 스크립트를 작성해봅시다.

$ cat test1
#!/bin/bash
IFS_OLD=$IFS
IFS=$'\n'
for user in $(cat /etc/passwd | tail -3)
do
        echo "user information: $user"
        IFS=:
        for info in $user
        do
                echo $info
        done
        echo ""
done
IFS=$IFS_OLD

$ ./test1
user information: hyeob:x:1000:1000:hyeob:/home/hyeob:/bin/bash
hyeob
x
1000
1000
hyeob
/home/hyeob
/bin/bash

user information: lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
lxd
x
998
100

/var/snap/lxd/common/lxd
/bin/false

user information: git:x:1001:1001::/home/git:/usr/bin/git-shell
git
x
1001
1001

/home/git
/usr/bin/git-shell

좋은 웹페이지 즐겨찾기