쉘 스크립트 내에서 산술연산을 할 때는
$((x+y))
$((5*7))
같이 소괄호 두개로 묶는 형태로 입력한다.
#!/bin/bash
x=3
y=4
echo $(( x +y))
echo $(($x* $y ))
변수를 사용하기 위해서는 변수앞에 $를 붙이는데
$(( )) 안에서는 붙여도 되고 붙이지 않아도 된다.
또 $(( )) 안에서는 띄어쓰기도 따로 엄격하지 않아서 위처럼 공백이 막 있어도 정상적으로 작동한다.
- let
let 명령어를 이용한 변수선언 안에서는 $도, ()도 없이 변수를 이용한 산술연산이 가능하다.
#!/bin/bash
x=3
y=4
let z=x*y
let a=10/2
echo $z
echo $a
- expr
expr 명령어를 사용하면 네가지 연산을 할 수 있다.
- 산술 : + - * / %
- 논리 : | &
- 관계 : = != > >= < <=
- 문자열 : : (일치 혹은 substitute)
expr에서는 연산자와 피연산자 사이에 공백' ' 이 있어야한다.
없으면 통으로 하나의 문자열로 인식한다.
또한 쉘 스크립트에서 이미 특수문자를 사용하고 있기 때문에 expr에서 사용할 특수문자와 겹치는 것은 따옴표나 쌍따옴표로 감싸거나 앞에 \를 붙여준다.
해당 특수문자
- * all 전체
- & bg
- | pipe 파이프
- > 리다이렉션
- < 리다이렉션
- ( ) grouping 그룹화
#!/bin/bash
x=3
y=4
echo $(expr 2+2) <-----잘못된것
echo $(expr x+y) <-----잘못된것
echo $(expr 2 + 2)
echo $(expr $x + $y + -22)
echo $(expr $x '*' $y)
echo $(expr $x "*" $y)
echo $(expr $x \* $y)
- awk
awk는 소수점도 사용이 가능하다
위의 expr과 같은 경우는 소수점이 없는 정수형이어서 나머지가 생기는 나누기와 같은 연산을 하면 소수점은 버린 결과를 보여주지만 awk는 소수점까지 나온다.
그러나 사용 방법이 번거롭다
$ echo 3 4 | awk '{print $1+$2}'
7
$ echo 3 4 | awk '{print $1/$2}'
0.75
$ echo | awk '{print 10*5}'
50
파이프 없이 echo awk '{print 10*5}' 이렇게 쓰면 awk {print 10*5} 문자가 출력될뿐이다
- bc
basic calculator의 약자이다
실수, 사칙연산, 거듭제곱 등 고급 기능도 있으면서 가벼운것이 특징이다
사용법은 연산 전체를 따옴표로 묶고 파이프를 통해 bc 명령어를 거치기만 하면 된다
$ echo '10/4' | bc
2
$ echo 'scale=2;10/4' | bc
2.50
echo '3^3' | bc
27
echo '3^3^3' | bc
7625597484987
scale을 통해 소수점 몇자리까지 표현할것인지 정할 수 있다
거듭제곱은 일반적인것과는 다르게 뒤에서부터 소괄호( )로 묶여있는것처럼 계산되어 나온다
위 예시를 보면
3^3^3은 원래 19,683이 나와야 하지만
이녀석의 계산방식은 3^(3^3) 이런 방식이다
그래서 원래는 27^3 이어야 할것이 3^27이 되므로 결과가 달라진다
'리눅스 (Linux)' 카테고리의 다른 글
mariaDB - service mysql start 실패 (0) | 2021.12.23 |
---|---|
mariaDB 완전히(?) 삭제하기 (0) | 2021.12.23 |
C++ 로 구구단 만들어 G++로 변환하고 출력하기 (0) | 2021.12.22 |
Shell Script에 대한 정리 잘된 블로그 (0) | 2021.12.22 |
While (0) | 2021.12.21 |
댓글