먼저 알아야 할 필수 Shell Scripting 기본
It looks like only the source citation was provided. Could you please share the text you’d like translated into Korean? Once I have the content, I’ll translate it while preserving the formatting, markdown, and technical terms as requested.
Source: …
소개
이전에 쉘 스크립팅에 관한 글을 썼었는데, 예상보다 훨씬 많은 사람들이 읽어 주었습니다.
쉘 스크립팅은 별로 “트렌디”한 기술이 아니기 때문에 관심이 별로 없을 거라 생각했었습니다.
그 경험을 통해 저는 다음을 깨달았습니다:
우리가 생각하는 것보다 쉘 스크립팅을 배우고 싶어 하는 사람이 더 많을 가능성이 있습니다.
그래서 이번 글에서는 핵심 쉘 스크립팅 기초 요약을 공유하고자 합니다.
이 가이드는 첫 번째 쉘 스크립트를 작성할 때 막히지 않도록 알아야 할 최소한의 내용을 다루도록 설계되었습니다. 각 주제를 깊게 파고들기보다는 폭넓은 실용적 인식에 중점을 두었습니다.
이 글은 특히 다음과 같은 경우에 유용합니다:
- ✅ 쉘 스크립트를 한 번도 작성해 본 적이 없는 경우
- ✅ 한 번 시도했지만 어려움을 겪은 경우
- ✅ 쉘 스크립팅이 다른 언어와 어떻게 다른지 이해하고 싶은 경우
쉘 스크립트 기본 규칙
.sh 확장자는 관례입니다
기술적으로 쉘 스크립트는 어떤 파일 확장자든 가질 수 있지만, .sh가 널리 받아들여지는 관례입니다.
hello.sh
backup.sh
deploy.sh
.sh를 사용하면 편집기와 GitHub에서 구문 강조가 적용되므로, 특별한 이유가 없는 한 그대로 사용하는 것이 좋습니다.
첫 번째 줄에 셰뱅(#!)을 작성하세요
쉘 스크립트는 셰뱅으로 시작해야 합니다:
#!/bin/bash
셰뱅은 스크립트를 실행할 쉘을 지정합니다. #! 뒤에 쉘의 전체 경로를 적습니다.
한 줄에 하나의 명령어
쉘 스크립트에서는 줄바꿈이 명령어를 구분하므로 기본 규칙은 한 줄에 하나의 명령어입니다.
명령어를 여러 줄에 걸쳐 작성하고 싶다면 \를 사용합니다:
echo "This is \
one command"
주석은 # 사용
주석은 #으로 시작합니다. 줄 중간에도 주석을 달 수 있습니다. 여러 줄을 한 번에 주석 처리하는 기본 방법은 없습니다.
# This is a comment
echo "hello" # inline comments are allowed
Source: …
변수 작업
변수 정의
변수는 다음과 같이 자동으로 생성됩니다:
variable_name=value
별도의 선언이 필요하지 않습니다.
변수 명명 규칙
- 허용 문자: 영문자, 숫자,
_ - 숫자로 시작할 수 없음
- 일반적으로 소문자 스네이크 케이스 사용
- 변수는 기본적으로 문자열로 취급
정수 변수를 사용하려면 명시적으로 선언해야 합니다:
# 문자열 변수
sum=2+9
echo $sum # → 2+9
# 정수 변수
declare -i sum
sum=2+9
echo $sum # → 11
변수 참조
변수를 참조하려면 앞에 $를 붙입니다:
name="Alice"
echo $name # → Alice
Bash에서는 정의되지 않은 변수를 참조해도 오류가 발생하지 않으며 빈 문자열로 확장됩니다:
echo $undefined # → (빈 출력)
변수 이름과 주변 텍스트를 명확히 구분하려면 {}를 사용합니다:
item="pen"
echo "I have many ${item}s" # → I have many pens
작은 따옴표와 큰 따옴표
인용 부호의 종류에 따라 동작이 다릅니다:
| 인용 부호 | 동작 |
|---|---|
" | 변수 확장 |
' | 변수 확장되지 않음 |
name="Alice"
echo "$name" # → Alice
echo '$name' # → $name
큰 따옴표 안에서 문자를 이스케이프하려면 \를 사용합니다:
echo "\$name" # → $name
Common Control Structures
Conditional Branching (if / case)
if Statements
if [ condition ]; then
do_something
elif [ another_condition ]; then
do_something_else
else
fallback
fi
두 가지 조건 스타일([]와 [[]])이 있습니다. 차이점이 궁금하다면 다음 글을 참고하세요:
What’s the difference between [ and [[ in shell scripts?
case Statements
case는 여러 패턴을 처리할 때 유용합니다:
case "$var" in
start)
echo "start"
;;
stop)
echo "stop"
;;
*)
echo "other"
;;
esac
Loops (for / while)
for Loop
for value in a b c; do
echo $value
done
while Loop
declare -i count=0
while [ $count -lt 5 ]; do
echo $count
count=$count+1
done
무한 루프는 다음과 같이 작성할 수 있습니다:
while true; do
echo "looping..."
sleep 1
done
Functions
함수는 다음과 같이 정의합니다:
hello() {
echo "Hello $1 and $2"
}
인자는 $1, $2, $3 등으로 접근합니다.
함수를 호출하는 예:
hello "Alice" "Bob" # → Hello Alice and Bob
Shell‑Specific Concepts
Exit Status
Linux에서는 모든 명령이 종료 상태(exit status) 를 반환합니다:
- 0 → 성공
- 0이 아닌 값 → 실패
종료 상태는 자동으로 표시되지 않습니다. $? 로 확인할 수 있습니다:
ls /usr
# → bin libexec sbin standalone X11R6 lib local share X11
echo $? # → 0
ls /aaa
# → ls: /aaa: No such file or directory
echo $? # → 1
if 문에서 종료 상태를 사용할 때, 값이 0이면 참 (즉, 명령이 성공) 으로 간주되고, 0이 아닌 값은 거짓 으로 간주됩니다.
명제
- 0은 true로 간주됩니다
- 0이 아닌 값은 false로 간주됩니다
if ls /usr; then
echo "success"
else
echo "failure"
fi
# → success
if ls /aaa; then
echo "success"
else
echo "failure"
fi
# → failure
명령 치환
$(…) 를 사용하여 명령 출력을 변수에 저장할 수 있습니다:
now=$(date)
echo $now
# → Fri Dec 12 19:47:14 JST 2025
Pathname Expansion (Globbing)
쉘은 * 및 ?와 같은 패턴을 여러 파일 이름으로 확장할 수 있습니다.
Examples → 예시
ls
# → file1.txt file2.txt string.c string.h string.txt
# ? matches a single character
ls string.?
# → string.c string.h
# * matches any string
ls *.txt
# → file1.txt file2.txt string.txt
# [] matches one of the listed characters
ls string.[ch]
# → string.c string.h
셸 스크립트를 수동으로 실행하기
방법 1: 직접 실행 (추천)
./hello.sh
- 스크립트 경로를 지정합니다 (상대 경로나 절대 경로).
- shebang에 정의된 셸을 사용해 실행됩니다.
- 실행 권한이 필요합니다:
chmod +x hello.sh.
✅ ./hello.sh
❌ hello.sh # 스크립트 이름만으로는 충분하지 않음
방법 2: 셸에 전달하기
bash hello.sh
- 실행 권한이 필요하지 않습니다.
- 올바른 셸을 직접 선택해야 합니다.
결론
이 글은 첫 번째 셸 스크립트를 작성할 때 막히지 않기 위해 필요한 최소 지식을 요약했습니다.
배워야 할 더 많은 중요한 패턴과 기술이 있기 때문에, 구체적인 주제에 대해 더 깊이 파고드는 후속 글을 작성할 계획입니다.
💬 당신은 어떠신가요?
- 처음 쉘 스크립트를 배울 때 가장 혼란스러웠던 부분은 무엇이었나요?
- 놀라웠던 쉘‑스크립팅 규칙이나 동작이 있나요?
- 특정 주제(예:
if조건, 인용, 디버깅)에 대한 더 깊은 글을 보고 싶으신가요?