오토에버 클라우드 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 ]] |
-gt | a > b | [[ $a -gt $b ]] |
-lt | a < b | [[ $a -lt $b ]] |
-ge | a ≥ b | [[ $a -ge $b ]] |
-le | a ≤ 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 file2 | file1이 최신인가 |
file1 -ot file2 | file1이 오래됐나 |
1
2
3
if [[ -f myfile.txt && -r myfile.txt ]]; then
echo "읽을 수 있는 일반 파일입니다"
fi
정규 표현식 (Regular Expressions)
문자열 검색/치환에 사용되며, [[ =~ ]] 또는 grep, sed, awk 명령어와 함께 쓴다
기본 정규표현식 기호
| 기호 | 의미 | 예시 |
|---|---|---|
. | 임의의 한 문자 | a.b → acb, a_b 등 |
* | 앞 문자가 0개 이상 반복 | lo*l → ll, lol, lool |
+ | 앞 문자가 1개 이상 반복 (확장 정규식) | lo+l → lol, lool |
? | 앞 문자가 0개 또는 1개 | lo?l → ll, lol |
^ | 문자열 시작 | ^abc → abc로 시작 |
$ | 문자열 끝 | 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 d | f: 파일 / d: 디렉터리만 검색 |
-size +100M | 100MB보다 큰 파일 검색 |
-mtime -3 | 3일 이내에 수정된 파일 |
-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.