셸 스크립트 (Shell Script)

[셸 스크립트] 8. IFS 설정 변경해서 /etc/passwd 파일 변수에 저장하기

여유곰 2024. 6. 23. 16:17

IFS(Internal Field Separator)는 필드를 구분하기 위한 설정값을 저장해 놓은 변수이다. 기본 설정은 공백(스페이스, 탭, 새 라인)으로 되어 있다. 예를 들어 보자. 지난 시간에 만든 간단한 스크립트 파일이다.

 

#!/bin/bash
while read text        
do
          echo "Line : $text" 
done < test.txt    

 

test.txt 파일 안에 있는 내용을 한 줄씩 $text 변수 안에 넣어 모니터에 출력하는 스크립트이다.

한 줄씩 변수에 내용을 입력할 수 있는 이유는 IFS 설정이 공백으로 되어 있기 때문이다.

IFS 설정을 다른 문자로 바꿔 준다면 파일을 불러와 내용을 자동으로 저장하는 것도 가능하다.

 

연습을 위해 /etc/passwd 파일을 사용해 보자.

passwd파일은 서버에 등록되어 있는 모든 계정을 저장한 파일이다.

파일 구조는 다음과 같다.

 

user1         :      x        : 1102 : 1103 :                 : /home/user1 : /bin/bash

사용자 이름 : 패스워드 : UID  :  GID  : 기타 정보 :   홈 디렉토리    : 사용자가 로그인한 셸

 

각 항목은  콜론 : 으로 구분한다.  따라서 IFS 값을 : 으로 변경한다면 각 항목별로 변수에 저장할 수 있는 것이다.

 

스크립트를 작성해 보자.

#!/bin/bash
while IFS=: read id password uid gid etc home shell                   

         #IFS를 : 으로 설정하고 read 뒤에 있는 변수에 순서대로 값을 입력한다.
do
        echo "id : $id, pw : $password, uid : $uid, gid : $gid, etc : $etc, home : $home, shell : $shell"
         #echo를 사용해 입력받은 변수의 값을 출력한다
done < /etc/passwd
         #/etc/passwd파일을 읽어들인다.

 

결과는 다음과 같다.