Post

오토에버 클라우드 2기 20일차

오토에버 클라우드 2기 20일차

셸프로그래밍에서 연산자

산술 연산자 (Arithmetic Operators)

$(( ... )) 또는 let, expr로 계산 Bash 4.0 이상이면 (( ... )) 표현도 사용 가능

연산자의미예시
+더하기echo $((3 + 5))
-빼기let result=10-2
*곱하기expr 4 \* 3
/나누기((result=8/2))
%나머지remainder=$((10 % 3))
**거듭제곱echo $((2 ** 3)) → 8
++증가((count++))
--감소((count--))

주의: *expr 명령에서는 \*로 이스케이프 필요

 

숫자 비교 연산자 (정수)

[[ ... ]], [ ... ], test, (( ... )) 표현에서 사용됨

연산자의미예시
-eq같음[[ $a -eq $b ]]
-ne같지 않음[[ $a -ne $b ]]
-gta > b[[ $a -gt $b ]]
-lta < b[[ $a -lt $b ]]
-gea ≥ b[[ $a -ge $b ]]
-lea ≤ b[[ $a -le $b ]]

또는 (( a > b )) 같이 사용할 수도 있음

 

문자열 비교 연산자

연산자의미예시
=같음[[ "$a" = "$b" ]]
==같음 (bash에서 =과 동일)[[ "$a" == "$b" ]]
!=다름[[ "$a" != "$b" ]]
<사전순 앞 (작음)[[ "$a" < "$b" ]]
>사전순 뒤 (큼)[[ "$a" > "$b" ]]
-z길이가 0인가[[ -z "$a" ]]
-n길이가 0보다 큰가[[ -n "$a" ]]

<, >[[ ... ]] 내에서만 동작하며 [ ... ]에서는 에러

 

논리 연산자

연산자의미예시
&&AND (그리고)[[ $a -gt 0 && $b -lt 10 ]]
!NOT (부정)[[ ! -f file.txt ]]

[[ 조건1 && 조건2 ]] 같은 복합 조건에서 유용

 

파일 연산자

연산자의미
-f일반 파일인가
-d디렉토리인가
-e존재하는가
-r읽기 가능한가
-w쓰기 가능한가
-x실행 가능한가
-s크기가 0이 아닌가
-L심볼릭 링크인가
file1 -nt file2file1이 최신인가
file1 -ot file2file1이 오래됐나
1
2
3
if [[ -f myfile.txt && -r myfile.txt ]]; then
  echo "읽을 수 있는 일반 파일입니다"
fi

 

정규 표현식 (Regular Expressions)

문자열 검색/치환에 사용되며, [[ =~ ]] 또는 grep, sed, awk 명령어와 함께 쓴다

기본 정규표현식 기호

기호의미예시
.임의의 한 문자a.bacb, a_b
*앞 문자가 0개 이상 반복lo*lll, lol, lool
+앞 문자가 1개 이상 반복 (확장 정규식)lo+llol, lool
?앞 문자가 0개 또는 1개lo?lll, lol
^문자열 시작^abcabc로 시작
$문자열 끝xyz$xyz로 끝
[...]괄호 안 문자 중 하나[abc]a, b, c 중 하나
[^...]괄호 안 문자를 제외한 하나[^0-9] → 숫자가 아닌 문자

예시 1 – 조건문에서 사용

1
2
3
if [[ $email =~ ^[a-zA-Z0-9._%+-]+@example\.com$ ]]; then
  echo "유효한 이메일입니다."
fi

예시 2 – grep에서 사용

1
grep '^[0-9]\{3\}-[0-9]\{4\}' phonebook.txt

 

POSIX 문자 클래스

정규 표현식 안에서 특정 문자 범주를 정의할 때 사용합니다. 주로 grep, sed, awk 등과 함께 사용합니다.

클래스의미예시 (grep)
[:alnum:]알파벳+숫자 (a-zA-Z0-9)grep '[[:alnum:]]'
[:alpha:]알파벳 (a-zA-Z)grep '[[:alpha:]]'
[:digit:]숫자 (0-9)grep '[[:digit:]]'
[:lower:]소문자grep '[[:lower:]]'
[:upper:]대문자grep '[[:upper:]]'
[:space:]공백 (\t, \n등)grep '[[:space:]]'
[:punct:]구두점(., !, ?, 등)grep '[[:punct:]]'

POSIX 문자 클래스는 대괄호 안에 [[:alpha:]]처럼 중첩된 형태로 사용

 

find: 파일 및 디렉터리 검색

find 명령은 디렉터리 트리에서 파일이나 디렉터리를 조건에 따라 검색

기본 문법

1
find [검색위치] [조건] [실행할 명령]

📌 자주 쓰는 옵션

옵션설명
-name "*.txt"이름이 .txt로 끝나는 파일 검색
-type f / -type df: 파일 / d: 디렉터리만 검색
-size +100M100MB보다 큰 파일 검색
-mtime -33일 이내에 수정된 파일
-exec COMMAND {} \;찾은 파일에 대해 명령 실행 ({}: 찾은 파일)
-delete조건에 맞는 파일 삭제 (위험!)

📌 예시

1
2
3
find . -name "*.log" -delete           # 현재 디렉터리에서 .log 파일 삭제
find /var/log -type f -mtime -7        # 최근 7일 내 수정된 로그 파일 찾기
find . -type f -exec chmod 644 {} \;   # 모든 파일 권한을 644로 변경

 

grep: 문자열 검색

grep은 입력된 파일 또는 표준 입력에서 특정 문자열(패턴) 을 찾는다

기본 문법

1
grep [옵션] "패턴" [파일명]

자주 쓰는 옵션

옵션설명
-i대소문자 구분 없이 검색
-r하위 디렉토리까지 재귀적으로 검색
-n해당 문자열이 있는 행 번호 함께 출력
-v패턴과 일치하지 않는 줄 출력
-E확장 정규표현식 사용 (기본은 기본 정규식)

예시

1
2
3
4
grep "error" server.log                 # error 포함된 줄 출력
grep -i "fail" *.log                    # fail (대소문자 무시) 검색
grep -rn "main()" ./src                 # 소스 폴더에서 main() 위치 찾기
grep -v "^#" config.conf                # 주석 제거된 설정 파일 보기

 

awk: 텍스트 처리 및 리포팅

awk는 열(column) 기반의 데이터를 처리하는 데 강력한 기능을 가진 텍스트 프로세싱 도구

기본 문법

1
awk '패턴 {액션}' [파일명]

자주 쓰는 기능

구문설명
$1, $2, …각 열(column)을 의미
NF현재 줄의 필드 수
NR현재까지 읽은 줄 번호
BEGIN / END처리 전/후에 실행되는 블록

예시

1
2
3
4
awk '{print $1}' file.txt              # 첫 번째 열 출력
awk '$3 > 50 {print $1, $3}' scores.txt # 세 번째 열이 50 초과일 때 출력
awk -F: '{print $1}' /etc/passwd       # 콜론(:) 구분자로 첫 번째 필드 출력
awk 'BEGIN {sum=0} {sum+=$2} END {print sum}' data.txt # 두 번째 열 합계 출력

요약 비교

명령어주요 기능특징
find파일 검색이름, 크기, 시간 등 조건으로 파일 탐색
grep문자열 검색빠르고 강력한 패턴 기반 검색
awk텍스트 처리컬럼 단위 분석, 조건별 출력 및 계산 가능
This post is licensed under CC BY 4.0 by the author.