먼저 알아야 할 필수 Shell Scripting 기본

발행: (2025년 12월 16일 오후 08:49 GMT+9)
10 min read
원문: Dev.to

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 조건, 인용, 디버깅)에 대한 더 깊은 글을 보고 싶으신가요?
Back to Blog

관련 글

더 보기 »

12일간의 Shell

기사 URL: https://12days.cmdchallenge.com 댓글 URL: https://news.ycombinator.com/item?id=46190577 점수: 31 댓글: 8…