ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 셸 스크립트 주요 구문 정리
    Linux 2025. 10. 28. 16:32

    1. 변수

    • 시스템 환경 변수 및 상수: 일반적으로 모두 대문자를 사용 (예: PATH, HOME, USER, PWD)
    • 사용자 정의 변수: 일반적으로 소문자를 사용 (예: filename, count, result)
    구분 설명 예시
    일반 변수 선언 시 $ 없이, 참조 시 $ 붙임 name="cat"; echo $name
    전역 변수 스크립트 전체에서 사용 가능 var="hello"
    지역 변수 함수 내에서만 유효 local var="hi"
    예약 변수 시스템에서 기본 제공 $HOME, $PATH, $USER, $PWD
    환경 변수 하위 프로세스에도 전달됨 (export) export JAVA_HOME=/usr/lib/jvm/java-11
    위치 매개변수 스크립트 인자 전달용 $0(스크립트명), $1, $2, …, $#(인자 개수), $@(전체 인자)
    특수 매개변수 스크립트 제어용 $?(이전 명령어 종료코드), $$(현재 PID), $!(백그라운드 PID)

     

     

    2. 조건문

    • if 문
    if [ 조건식 ]; then         # 조건식이 참(true)이면 아래 명령 실행
      명령                      # 조건식이 참일 때 실행할 코드
    
    elif [ 조건식 ]; then       # 위 조건이 거짓이고, 새로운 조건식이 참일 때 실행
      명령                      # 두 번째 조건이 참일 때 실행할 코드
    
    else                        # 위의 모든 조건이 거짓일 때 실행
      명령                      # 기본적으로 실행할 코드
    
    fi                          # if 문의 끝 (반드시 있어야 함)
    #!/bin/bash
    
    num=15
    
    if [ $num -eq 10 ]; then
      echo "숫자는 10입니다."
    elif [ $num -eq 20 ]; then
      echo "숫자는 20입니다."
    else
      echo "숫자는 10도 20도 아닙니다."
    fi
    • case 문
    # 변수의 값에 따라 실행할 명령을 구분하는 case문
    case $변수 in
    
      값1)         # 만약 변수의 값이 '값1'이면
        명령1      # 이 명령을 실행
        ;;         # 이 블록의 끝을 표시 (반드시 필요)
    
      값2)         # 만약 변수의 값이 '값2'이면
        명령2      # 이 명령을 실행
        ;;         # 이 블록의 끝을 표시
    
      *)           # 위의 어떤 값과도 일치하지 않을 때 (기본값)
        기본명령   # 기본 동작 실행
        ;;        # 끝
    
    esac           # case 문의 끝을 표시 (반드시 있어야 함)
    #!/bin/bash
    
    fruit="포도"
    case $fruit in
      apple)
        echo "사과입니다"
        ;;
      banana)
        echo "바나나입니다"
        ;;
      *)
        echo "기타 과일입니다"
        ;;
    esac

     

    3. 반복문

    • for 문
    # 변수가 값1, 값2, 값3 하나씩 순서대로 대입되며 반복 실행
    # do로 반복 블록을 열고, done으로 닫음
    for 변수 in 값1 값2 값3; do
      명령
    done
    for fruit in apple banana orange; do
      echo "과일: $fruit"
    done
    • C 형식 for 문 (bash만 지원)
    # (()) 안에서 i++, i<=5 같은 산술 연산 가능
    # 변수 앞에 $ 안 붙여도 됨 ((( )) 안에서는 자동 인식)
    for (( 초기값; 조건식; 증감식 )); do
      명령
    done
    for (( i=1; i<=5; i++ )); do
      echo "반복: $i"
    done
    • while
    # 조건식이 참(true) 인 동안 블록(do~done)을 반복 실행
    # 조건식이 거짓(false) 가 되면 반복 종료
    while [ 조건식 ]
    do
      명령
    done
    count=1
    
    while [ $count -le 5 ]; do
      echo "현재 카운트: $count"
      count=$((count + 1))
    done
    • until : while 문과 정반대의 조건으로 동작하는 반복
    until [ 조건식 ]; do
      # 조건식이 '거짓'인 동안 실행할 명령
      명령
    done
    #!/bin/bash
    
    COUNT=1
    
    until [ $COUNT -gt 5 ]; do  # COUNT가 5보다 크지 않은 동안 (거짓인 동안) 반복
      echo "현재 COUNT: $COUNT"
      COUNT=$((COUNT + 1))       # COUNT 값을 1 증가
    done
    
    echo "반복문 종료"
    
    # 출력 결과:
    # 현재 COUNT: 1
    # 현재 COUNT: 2
    # 현재 COUNT: 3
    # 현재 COUNT: 4
    # 현재 COUNT: 5
    # 반복문 종료

     

    4. 연산자

    • 기본 연산자
    연산자 의미
    = 같음
    != 다름
    -n 문자열이 비어있지 않음
    -z 문자열이 비어있음
    • 비교 연산자
    기호 의미 대체
    > 크다 -gt
    < 작다 -lt
    >= 크거나 같다 -ge
    <= 작거나 같다 -le
    = 같다 -eq
    != 다르다 -ne
    • 논리 연산자
    • -a, -o는 POSIX 표준 문법이고 조건식 내에서 &&, ||는 Bash 확장 문법이다.
    • 현대의 대부분 리눅스 환경에서는 Bash 스타일(&&, ||)이 가독성과 안정성 측면에서 권장된다고 함.
    연산자  의미 동작 방식 예시
    -a (단일 괄호 [ ]에서 사용) AND (그리고) 두 조건이 모두 참일 때만 전체 결과가 true [ $a -gt 0 -a $b -lt 10 ]
    && (이중 괄호 [[ ]]에서 사용) AND (그리고) 두 조건이 모두 참 일 때만 전체 결과가 true [[ $a -gt 0 && $b -lt 10 ]]
    a=5
    b=8
    if [[ $a -gt 0 && $b -lt 10 ]]; then
      echo "a와 b 모두 0~10 사이입니다"
    fi
    연산자 의미 동작 방식 예시
    -o (단일 괄호 [ ]에서 사용) OR (또는) 두 조건 중 하나라도 참이면 전체 결과가 참 [ $a -eq 1 -o $b -eq 2 ]
    || (이중 괄호 [[ ]]에서 사용) OR (또는) 두 조건 중 하나라도 참이면 전체 결과가 참 [[ $a -eq 1 || $b -eq 2 ]]
    a=1
    b=10
    
    if [[ $a -eq 1 || $b -eq 2 ]]; then
      echo "하나라도 참이므로 실행됩니다"
    else
      echo "둘 다 거짓이라 실행되지 않습니다"
    fi
    • 파일 /디렉터리 연산자
    연산자  설명
    -e 존재 여부
    -f 일반 파일 여부
    -d 디렉터리 여부
    -r 읽기 가능 여부
    -w 쓰기 가능 여부
    -x 실행 가능 여부

     

    5. 정규표현식

    셸 환경에서 정규 표현식은 POSIX 표준을 따른다.

    리눅스나 유닉스에서 특별한 특징을 부여하는 문자들과 메타 문자들의 집합으로 주로 텍스트 탐색이나 문자열 조작에 쓰이며, 하나의 문자 혹은 문자열의 일부분을 표현할 때 쓰인다.

    #!/bin/bash
    
    filename="report_20250701.log"
    
    # 파일명이 'report_'로 시작하고 숫자로 끝나는지 확인
    if [[ $filename =~ ^report_[0-9]+\.log$ ]]; then
      echo "정규 표현식과 일치합니다."
    else
      echo "일치하지 않습니다."
    fi

     

    6. 자주 쓰이는 리눅스 명령어

    명령어 기능 예시
    grep 문자열 검색 grep "error" logfile.txt
    find 파일 찾기 find / -name "*.log"
    awk 특정 필드 추출 awk '{print $1, $3}' data.txt
    sed 문자열 치환 sed 's/foo/bar/g' file.txt
    date 날짜/시간 출력 date "+%Y-%m-%d %H:%M:%S"

    'Linux' 카테고리의 다른 글

    Rocky Linux CLI 모드로 변경  (0) 2025.10.30
    Rocky 리눅스 비밀번호 재설정  (0) 2025.10.28
    yt-dlp로 유튜브 빌리빌리 영상 다운 받기  (0) 2025.10.05
    VirtualBox VM 가상 디스크 확장  (0) 2025.09.08
    Github 저장소 연결  (0) 2025.07.31
Designed by Tistory.