공부 기록

[학습 후기] 리눅스 입문: Bash 셸 스크립트 (9~11장)

aeve 2025. 12. 7. 19:35

1. Bash 변수와 조건문의 독특한 문법

가장 먼저 배운 것은 변수 사용법이었습니다. 파이썬이나 C 같은 언어에 익숙하다면 Bash의 문법이 조금 깐깐하게 느껴질 수 있습니다.

가장 주의해야 할 점은 할당할 때 공백을 허용하지 않는다는 것입니다. variable = value처럼 띄어 쓰면 안 되고, variable=value처럼 붙여 써야 합니다. 또한 Bash는 기본적으로 모든 변수를 문자열로 처리하기 때문에, 산술 연산을 하려면 let이나 expr 같은 별도의 명령어가 필요하다는 점이 특이했습니다.

조건문 (if)

Bash의 if 문은 참/거짓을 판별하는 방식이 조금 다릅니다. 조건식의 결과가 아니라, 명령어의 종료 코드(Exit Code)가 0이면 참으로 인식합니다.

테스트 연산자([ ])를 사용할 때도 주의할 점이 많았습니다.

  • 변수는 꼭 큰따옴표로 감싸는 게 안전합니다.
  • 문자열 비교(=, !=)와 산술 비교(-eq, -lt 등) 연산자가 명확히 구분됩니다.
  • 파일 테스트 연산자(-f, -d, -e)를 이용하면 파일이 있는지, 디렉터리인지 등을 쉽게 확인할 수 있어 자동화 스크립트를 짤 때 유용해 보였습니다.

2. 반복문과 함수의 세계

스크립트의 효율을 높여주는 반복문과 함수도 학습했습니다.

반복문

for, while, until 세 가지 방식이 있는데, 문법은 다른 프로그래밍 언어와 비슷하지만 do와 done으로 블록을 감싸는 점이 다릅니다. break와 continue를 이용해 흐름을 제어하는 방법도 실습해 봤습니다.

함수와 반환값의 함정

함수 부분에서 가장 헷갈렸던 건 반환값의 개념이었습니다. 보통 프로그래밍에서 return은 결과 데이터를 반환하지만, Bash 함수에서의 return은 종료 코드(0~255)만을 반환합니다.

그럼 실제 계산 결과는 어떻게 받을까요? 함수 내부에서 echo로 값을 출력하고, 함수를 호출할 때 $(함수명) 형태의 명령어 치환을 사용해 그 출력을 변수에 담아야 합니다. 이 메커니즘을 이해하는 게 이번 챕터의 핵심이었습니다.

3. 배열과 쿼팅, 그리고 확장

배열

리눅스 셸에서도 배열을 쓸 수 있다는 걸 알았습니다.

  • 인덱스 배열: 숫자로 접근 (일반적인 배열)
  • 연관 배열: 키(Key)와 값(Value)으로 접근 (딕셔너리나 맵과 유사)

쿼팅 (Quoting)

스크립트를 짜다 보면 따옴표 처리가 정말 중요합니다.

  • 싱글 쿼트('): 안에 있는 모든 문자를 문자 그대로 취급합니다. 변수($var)도 해석되지 않고 글자 그대로 출력됩니다.
  • 더블 쿼트("): 변수나 명령어 치환 등은 해석하고, 공백은 문자로 처리합니다.

변수 안에 공백이 있거나 특수문자가 섞여 있을 때 어떤 따옴표를 써야 할지 명확히 구분할 수 있어야 오류를 줄일 수 있습니다.

확장

마지막으로 셸이 명령어를 실행하기 직전에 값을 바꿔치기하는 확장 개념을 배웠습니다. {a,b,c}처럼 중괄호를 쓰거나 ~로 홈 디렉터리를 표시하는 것들이 모두 셸의 확장 기능이었습니다. 이 원리를 알고 나니 그동안 무심코 썼던 명령어들이 어떻게 동작하는지 더 깊이 이해하게 되었습니다.

 


마무리

9장에서 11장까지 학습하면서, 이제 리눅스 터미널이 단순한 명령 입력창이 아니라 프로그래밍 환경으로 보이기 시작했습니다.

특히 시스템 관리 업무를 한다면 반복적인 작업을 스크립트로 만들어두는 게 필수적일 텐데, 이번에 배운 변수, 조건문, 함수가 그 기초가 될 것 같습니다. 문법이 띄어쓰기 하나에도 민감해서 까다롭지만, 익숙해지면 활용도가 무궁무진할 것 같습니다.