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장까지 학습하면서, 이제 리눅스 터미널이 단순한 명령 입력창이 아니라 프로그래밍 환경으로 보이기 시작했습니다.
특히 시스템 관리 업무를 한다면 반복적인 작업을 스크립트로 만들어두는 게 필수적일 텐데, 이번에 배운 변수, 조건문, 함수가 그 기초가 될 것 같습니다. 문법이 띄어쓰기 하나에도 민감해서 까다롭지만, 익숙해지면 활용도가 무궁무진할 것 같습니다.
'공부 기록' 카테고리의 다른 글
| [2주/6주] 혼자 공부하는 바이브 코딩 2주 차 학습기록 (0) | 2026.01.18 |
|---|---|
| [1주/6주] 혼자 공부하는 바이브 코딩 1주 차 학습기록 (0) | 2026.01.11 |
| [학습 후기] 리눅스 입문: 시스템 관리와 9가지 필수 도구 (13~14장) (0) | 2025.12.17 |
| [학습 후기] 리눅스 입문: 리눅스 시스템 관리와 프로세스 (5~7장) (0) | 2025.11.30 |
| [학습 후기] 리눅스 입문: OS의 구조부터 파일 시스템까지 (1~4장) (0) | 2025.11.23 |