C.W.K.
Stream
Lesson 03 of 12 · published

조건문 — if/elif/else 와 [[ ]]

~12 min · if, test, comparison

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

모양

if [[ 조건 ]]; then
  # ...
elif [[ 다른 조건 ]]; then
  # ...
else
  # ...
fi

ifcommand 받음. 실행해서 exit code 로 분기 (0 = then, non-zero = else). [[ ... ]] 는 bash/zsh 의 test command — POSIX [ ... ] 보다 안전 (빈 변수에 잘 작동) + 연산자 더 풍부.

문자열 테스트

  • [[ -z "$x" ]] — 비어 있음.
  • [[ -n "$x" ]] — 비어 있지 않음.
  • [[ "$a" == "$b" ]] — 같음.
  • [[ "$a" != "$b" ]] — 다름.
  • [[ "$x" == prefix* ]] — glob 매치 ([[ ]] 안에서만).
  • [[ "$x" =~ ^[0-9]+$ ]] — regex 매치 (bash/zsh).

숫자 테스트

  • [[ $a -eq $b ]] — 같음 (eq, ne, lt, le, gt, ge).
  • (( a == b )) — 산술 context (수학에 더 깔끔).

파일 테스트

  • [[ -f path ]] — 일반 파일 존재.
  • [[ -d path ]] — 디렉터리.
  • [[ -e path ]] — 존재 (타입 무관).
  • [[ -r path ]], -w, -x — 읽기 / 쓰기 / 실행.
  • [[ -s path ]] — 존재 + 비어 있지 않음.

And / or

if [[ -f config.yaml && -r config.yaml ]]; then ...
if [[ -z "$NAME" || -z "$EMAIL" ]]; then ...

[[ ]] 안에선 &&, || 사용. 밖에선 command 자체를 체이닝.

Code

실전 조건문·bash
#!/usr/bin/env bash
set -euo pipefail
config=~/.config/myapp/config.yaml
if [[ -f "$config" && -r "$config" ]]; then
  echo "using $config"
elif [[ -n "${MYAPP_FALLBACK:-}" ]]; then
  echo "using fallback $MYAPP_FALLBACK"
else
  echo 'no config' >&2
  exit 1
fi

External links

Exercise

[[ -f $1 ]] 로 path 가 일반 파일인지 확인하는 스크립트. 존재 파일 / 디렉터리 / 없는 path 로 테스트. [[ -s $1 ]] 추가해 비어 있지 않음도 요구.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.