시스템/Shell-Script

사용자 계정 조회

달빛궁전- 2021. 6. 21. 21:16

업무 하다 보면, 자주 사용하는 게 셸 스크립트인데, 급하다는 핑계로 매번 복붙 해서 수정해서 사용한 게 많다.

어쨌든 시스템의 자동화를 잘하려면 셸 스크립트가 중요하니 인터넷, 서적 등을 통해 공부한 것을 작성해보자.

 

- 만든계기 :

시스템상의 계정이 있는지 확인하고, 계정이 있으면 홈 디렉터리와 같이 보여준다. 없으면 존재하지 않음이라고 표현한다.

 

- 내용 :

1. /etc/passwd 로 사용자 계정만 추출한다.

2. 계정을 입력받는다. 

3. userhome디렉토리를 변수로 받아둔다.

4. for문으로 위의 /etc/passwd 변수를 돌린다.

5. if문으로 user_check변수를 돌리면서, 입력받은 값이 있는지 계속 돌린다.

있으면 계정과 홈디렉토리를 echo출력으로 보여준다.

이때 check라는 변수에 1을 주면서, break로 for문을 빠져나갈 수 있게 한다.

6. 위의 조건이 아니라면 check 0을 주고 if문을 끝낸다.

7. 다시 if문을 하나 주고,  check변수가 0이면 해당 계정은 존재하지 않음으로 보여준다.

8. 끝

 

- shell-script 내용

#!/bin/bash

user_check=`cat /etc/passwd | awk -F ":" '{print $1}'`

echo "계정을 입력하세요"
read input

user_home=`cat /etc/passwd | grep $input | awk -F ":" '{print $6}'`

for ch in $user_check
do
if [ $ch = $input ]; then
        echo "$input 계정은 존재 하며, $user_home 홈디렉토리를 사용하고 있습니다.  "
check=1
break
else

check=0
fi
done

if [ $check -eq 0 ]; then
 echo "$input 계정은 존재 하지 않습니다."

else
exit 0
fi

 

- 실행시 결과

 

 

[opc@seonggi-centos work]$ sh -x ./user_check.sh 
++ cat /etc/passwd
++ awk -F : '{print $1}'
+ user_check='root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
libstoragemgmt
rpc
abrt
rpcuser
nfsnobody
sshd
postfix
chrony
ntp
tcpdump
oracle-cloud-agent
opc
oracle-cloud-agent-updater
ocarun'
+ echo '계정을 입력하세요'
계정을 입력하세요
+ read input
opc     
++ cat /etc/passwd
++ awk -F : '{print $6}'
++ grep opc
+ user_home=/home/opc
+ for ch in '$user_check'
+ '[' root = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' bin = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' daemon = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' adm = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' lp = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' sync = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' shutdown = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' halt = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' mail = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' operator = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' games = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' ftp = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' nobody = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' systemd-network = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' dbus = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' polkitd = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' libstoragemgmt = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' rpc = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' abrt = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' rpcuser = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' nfsnobody = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' sshd = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' postfix = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' chrony = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' ntp = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' tcpdump = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' oracle-cloud-agent = opc ']'
+ check=0
+ for ch in '$user_check'
+ '[' opc = opc ']'
+ echo 'opc 계정은 존재 하며, /home/opc 홈디렉토리를 사용하고 있습니다.  '
opc 계정은 존재 하며, /home/opc 홈디렉토리를 사용하고 있습니다.  
+ check=1
+ break
+ '[' 1 -eq 0 ']'
+ exit 0
[opc@seonggi-centos work]$ 

- 실행 했을때 결과 값

user_check실행