개발/Bash 쉘스크립트

[Bash] 리눅스 쉘 스크립트: expr 기본 사용 법 및 옵션 까지 모두 정리

일요일좋아하는사람 2025. 5. 5. 21:22
728x90
반응형

expr 명령어는 Bash에서 수치 연산이나 문자열 처리, 조건 비교 등을 간단히 수행할 수 있게 도와주는 유틸리티입니다. 특히 POSIX 호환성을 유지하면서도 복잡하지 않은 작업을 쉘 스크립트 내에서 간편하게 처리할 수 있어 여전히 많이 사용됩니다. 이 글에서는 expr 명령어의 역할, 사용법, 옵션, 다양한 예제 등을 통해 이 명령어를 효과적으로 활용하는 방법을 소개합니다.

expr 명령어의 역할

expr은 문자열이나 숫자 값을 평가하여 그 결과를 출력하는 명령어입니다. 주로 다음과 같은 역할을 수행합니다:

  • 산술 연산
  • 문자열 길이 측정
  • 문자열 추출
  • 문자열 비교
  • 논리 연산

Bash 자체의 (( )), $(( )) 구문에 비해 다소 구식처럼 보일 수 있지만, POSIX 환경이나 오래된 스크립트 호환성 유지가 필요한 경우 유용합니다.

expr 기본 사용법

expr [피연산자1] [연산자] [피연산자2]

공백을 반드시 띄워야 하며, 괄호는 쉘이 해석하지 않도록 백슬래시로 이스케이프하거나 큰따옴표로 감싸야 합니다.

주요 기능 및 예제

산술 연산

덧셈 (+)

  • 역할: 두 숫자의 합을 계산
  • 사용법:
  • expr 3 + 2
  • 결과: 5

뺄셈 (-)

  • 역할: 첫 숫자에서 두 번째 숫자를 뺌
  • 사용법:
  • expr 7 - 4
  • 결과: 3

곱셈 (*)

  • 역할: 두 수를 곱함 (이스케이프 필요)
  • 사용법:
  • expr 5 \* 2
  • 결과: 10

나눗셈 (/)

  • 역할: 첫 번째 수를 두 번째 수로 나눔
  • 사용법:
  • expr 10 / 2
  • 결과: 5

나머지 (%)

  • 역할: 첫 수를 두 번째 수로 나눈 나머지
  • 사용법:
  • expr 10 % 3
  • 결과: 1

비교 연산

같음 (=)

  • 역할: 두 문자열이 같은지 비교
  • 사용법:
  • expr "hello" = "hello"
  • 결과: 1 (같음), 0 (다름)

다름 (!=)

  • 역할: 두 문자열이 다른지 확인
  • 사용법:
  • expr "foo" != "bar"
  • 결과: 1

대소 비교 (<, >)

  • 역할: 문자열의 사전적 순서 비교 (이스케이프 필요)
  • 사용법:
  • expr "abc" \< "def"
  • 결과: 1

논리 연산

AND (&)

  • 역할: 두 조건이 모두 참인지 확인
  • 사용법:
  • expr 1 \& 1
  • 결과: 1

OR (|)

  • 역할: 두 조건 중 하나라도 참인지 확인
  • 사용법:
  • expr 0 \| 1
  • 결과: 1

문자열 처리

길이 측정 (length)

  • 역할: 문자열 길이를 구함
  • 사용법:
  • expr length "hello"
  • 결과: 5

부분 문자열 추출 (substr)

  • 역할: 지정된 위치부터 특정 길이만큼 문자열을 추출
  • 사용법:
  • expr substr "abcdef" 2 3
  • 결과: bcd

문자열 위치 (index)

  • 역할: 문자열 내에서 지정 문자가 처음 나타나는 위치
  • 사용법:
  • expr index "abcdef" "d"
  • 결과: 4

실제 사용 예제

#!/bin/bash

A=10
B=5

SUM=$(expr $A + $B)
PROD=$(expr $A \* $B)
LENGTH=$(expr length "HelloWorld")
PART=$(expr substr "abcdefg" 3 4)

echo "합계: $SUM"
echo "곱: $PROD"
echo "문자열 길이: $LENGTH"
echo "부분 문자열: $PART"

결과:

  • 합계: 15
  • 곱: 50
  • 문자열 길이: 10
  • 부분 문자열: cdef

expr 명령어는 간단하지만 다양한 기능을 제공하며, 특히 POSIX 표준을 따라야 하는 환경에서 그 유용성이 높습니다. 다만 복잡한 연산에는 let, (( )), awk 등을 고려하는 것이 좋습니다. 그러나 기본적인 연산이나 문자열 처리가 필요한 경우에는 여전히 유용한 도구입니다.

728x90
반응형