Bash Shell Script - 파일 읽는 방법

By JS | Last updated: October 07, 2021

Linux의 Bash 스크립트에서 파일의 내용을 읽는 방법을 소개합니다.

먼저 아래와 같이 file.txt 파일을 만들었습니다. 이 글의 예제에서는 이 파일을 읽을 것입니다.

# file.txt
Hello, World!
Sample text file!

1. cat을 이용하여 파일 읽기

cat으로 파일의 모든 내용을 변수에 저장하고, 그 변수를 echo로 출력할 수 있습니다.

#!/bin/bash

value=`cat file.txt`
echo "$value"

Output:

$ bash example.sh
Hello, World!
Sample text file!

2.'$()'를 이용하여 파일 읽기

value=$(<file.txt)는 파일의 내용을 변수에 저장합니다. 그리고 echo로 변수의 내용을 출력할 수 있습니다.

#!/bin/bash

value=$(<file.txt)
echo "$value"

Output:

$ bash example.sh
Hello, World!
Sample text file!

3. read를 이용하여 한 줄씩 읽기

while과 read를 이용하여 파일의 내용을 한 줄씩 읽을 수 있습니다.

다음과 같은 형태로 한 줄씩 읽고, 반복문 내에서 데이터를 가공할 수 있습니다.

#!/bin/bash

i=1
while read line || [ -n "$line" ] ; do
  echo "Line $i: $line"
  ((i+=1))
done < file.txt

Output:

$ bash example.sh
Line 1: Hello, World!
Line 2: Sample text file!

3.1 '[ -n "$line" ]' 조건이 필요한 이유

read는 Line에 개행문자가 포함되어있어야 Line으로 인식하고 True를 리턴합니다. 만약 마지막 줄을 읽었을 때, 개행문자가 없다면 False가 리턴되어 반복문이 종료됩니다. 이 때문에 마지막 Line가 처리되지 않을 수 있습니다.

테스트 연산자 -n은 문자열의 길이가 0이 아닐 때 True를 리턴합니다. 마지막 Line에 개행문자가 없어도 Empty String이 아니기 때문에 True가 되어 반복문이 수행됩니다.

다음과 같이 반복문에 read line 조건만 추가하고 스크립트를 실행하면 마지막 줄이 출력되지 않는 것을 확인할 수 있습니다.

#!/bin/bash

i=1
while read line; do
  echo "Line $i: $line"
  ((i+=1))
done < file.txt

Output:

$ bash example.sh
Line 1: Hello, World!
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha