Connecting

쉘 스크립트 기본 연산자 본문

쉘 스크립트

쉘 스크립트 기본 연산자

팬도라 2021. 1. 28. 16:44
반응형

다양한 쉘 종류에 따라 연산자도 다양하지만 이번 시간에서는 가장 기본적인 bash 쉘의 기본 연산자에 대해 설명한다.

  • 산술 연산자
  • 관계 연산자
  • Boolean 연산자
  • 문자열 연산자
  • 파일 테스트 연산자

bash의 경우 간단한 산술 연산을 수행하는 메커니즘이 존재하지 않기 때문에 awk 혹은 expr과 같은 기본 명령을 사용한다.

bash에서 진행하는 간단한 숫자 계산

기본적으로 bash에서는 사칙연산이 모두 가능하지만 나누기 소수점 계산은 불가능하며, 모두 정수형으로 취급된다. 따라서 awk나 bc 명령을 통해서 소수점 계산을 처리해야 한다.

bash 변수 처리

x=3
y=4
z=$((x+y))
echo $z
# 7
echo $((x-y))
echo $((x*y))
echo $((x/y))
# -1
# 12
# 0
echo $((12/5))
# 2

let 명령어

x=3
y=4
let z=$x+$y
echo $z
# 7
let z=$x-$y
echo $z
# -1
let z=$x*$y
echo $z
# 12
let z=12/5
echo $z
# 2

expr 명령어

숫자와 연산자 사이를 반드시 띄어써야 한다. 예를 들어 2+2 형식으로 하면 동작하지 않으며 2 + 2 형식으로 작성해야 한다. 또한 쉘 스크립트 내에서 연산을 적용하기 위해서는 `` backtick을 추가해야 한다.

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"
x=3
y=4
expr $x + $y
# 7
expr $x - $y
expr $x \* $y
expr $x / $y
# -1
# 12
# 0
expr 12 / 5
# 2

awk 명령어

리눅스에서 기본적으로 제공하는 명령어로 소수점 계산이 가능하다. 단 직접 변수를 사용하지 못하기 때문에 파이프를 통해 전달하는 과정이 필요하다.

x=3
y=4
echo $x $y | awk '{print $1+$2}'
# 7
echo $x $y | awk '{print $1-$2}'
# -1
echo $x $y | awk '{print $1*$2}'
# 12
echo $x $y | awk '{print $1/$2}'
# 0.75

bc 명령어

basic calculator의 약자로 리눅스 bc가 설치되어야 한다. 인터랙티브 모드와 배치 모드 둘다 사용이 가능하고, 실수, 사칙연산, 거듭제곱 등의 연산과 같은 고급 기능이 있으며 가볍다는 특징이 있다.

$ bc --version
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
$ echo '12+34' | bc
46
$ echo '12-34' | bc
-22
$ echo '12*34' | bc
408
$ echo '12/34' | bc
0
$ echo 'scale=2;12/34' | bc
.35
$ echo '43/21' | bc
2
$ echo 'scale=5;43/21' | bc
2.04761
$ echo '4^4^4' | bc
13407807929942597099574024998205846127479365820592393377723561443721\
76403007354697680187429816690342769003185818648605085375388281194656\
9946433649006084096

산술 연산자

Operator Description Example
+ (Addition) 덧셈 expr $a + $b
- (Subtraction) 뺄셈 expr $a - $b
- (Subtraction) 곱셈 expr $a \* $b
/ (Division) 나누기 expr $b / $a
% (Modulus) 나머지 반환 expr $b % $a
= (Assignment) 값 할당 a = $b
== (Equality) 비교 [ $a == $b ]
!= (Not Equality) 비교 [ $a != $b ]

관계 연산자

bash는 숫자 값과 관련된 관계 연산을 제공하며, 문자열은 제공되지 않는다.

Operator Description Example
-eq 두 피연산자의 값이 동일한 여부를 확인하여 같으면 참을 반환한다. [ $a -eq $b ]
-ne 두 피연산자의 값이 동일한지 여부를 확인하여 같지 않으면 참을 반환한다. [ $a -ne $b ]
-gt 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인하고, 그렇다면 조건이 참이된다. [ $a -gt $b ]
-lt 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작은 지 확인하고, 그렇다면 조건이 참이된다. [ $a -lt $b ]
-ge 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 크거나 같은지 확인하고, 그렇다면 조건이 참이된다. [ $a -ge $b ]
-le 왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 작거나 같은지 확인하고, 그렇다면 조건이 참이된다. [ $a -le $b ]

Boolean 연산자

a가 10이고 b가 20으로 가정한다.

Operator Description Example
! 논리 부정 [ ! false ] is true.
-o OR 연산자 [ $a -lt 20 -o $b -gt 100 ] is true.
-a AND 연산자 [ $a -lt 20 -a $b -gt 100 ] is false.

문자열 연산자

bash에서 문자열 연산을 위해서는 다음과 같은 명령을 수행해야 한다.

변수 a에는 "abc"가 있고 변수 b에는 "efg"가 있다고 가정한다.

Operator Description Example
= 두 피연산자의 값을 확인하고 같다면 참이다. [ $a = $b ]
!= 두 피연산자의 값을 확인하고 같지 않으면 참이다. [ $a != $b ]
-z 주어진 문자열 피연산자의 길이가 0이면 참이다. [ -z $a ]
-n 주어진 문자열 피연사자의 0이 아니면 참이다. [ -n $a ]
str 빈 문자열인지를 확인하고 비어있으면 거짓을 반한한다. [ $a ]

파일 테스트 연산자

파일과 관련된 속성을 테스트 히는데 확인하는 연산자이다. 파일의 이름이 이름은 test이고 크기가 100Byte, R/W/X 권한이 있다고 가정한다.

Operator Description Example
-b file 파일이 블록 파일인지 확인한다. (블록 디바이스 등) [ -b $file ]
-c file 파일이 문자 파일인지 확인한다. (키보드, 모뎀, 사운드 카드 등) [ -c $file ]
-d file 파일이 디렉터리인지 확인한다. [ -d $file ]
-f file 파일이 디렉터리나 일반파일인지 확인한다. (장치 파일이 아님) [ -f $file ]
-g file 파일에 SGID (Set Group ID)가 설정되어 있는지 확인한다. [ -g $file ]
-k file 파일에 고정 비트가 설정되어 있는지 확인한다. [ -k $file ]
-p file 파일이 명명 파이프인지 확인한다. [ -p $file ]
-t file 파일 설명자가 있고 터미널과 연결되어 있는지 확인한다. [ -t $file ]
-u file 파일에 SUID (Set User ID) 비트가 설정되어 있는지 확인한다. [ -u $file ]
-r file 파일을 읽을 수 있는지 확인한다. [ -r $file ]
-w file 파일 쓰기가 가능한지 확인한다. [ -w $file ]
-x file 파일 실행이 가능한지 확인한다. [ -x $file ]
-s file 파일의 크기가 0보다 큰지 확인한다. [ -s $file ]
-e file 파일이 존재하는지 확인한다. [ -e $file ]

'쉘 스크립트' 카테고리의 다른 글

쉘 스크립트 반복문 사용하기  (0) 2021.02.13
쉘 스크립트 조건문 사용하기  (0) 2021.02.13
쉘 스크립트 배열  (0) 2021.01.27
Shell 특수 변수  (0) 2021.01.26
Shell Script 변수  (0) 2021.01.19
Comments