반응형
bash, 쉘스크립트에서 숫자 연산하기(string to int)
기본적으로 쉘 스크립트는 모든 값을 문자열로 처리한다.
또한 데이터타입을 미리 정의하고 사용하는 방식이 아니기 때문에,
10이라는 값이 저장된 변수 a에 단순히 $a+10을 하게 될경우, "10+10"이 출력되는 경우가 종종 발생한다.
이를 해결하기 위한 방법을 알아본다.
expr을 사용하는 방식
expr을 앞에 붙여주면 자동적으로 수를 기반으로 한 사칙연산으로써 값이 표현된다.
다음 예시를 보자.
a=10
echo $a+10
# 실행 결과 : 10+10
echo 뒤에 `expr을 활용할 경우, 정상적으로 20이 출력된다.
a=10
echo `expr $a + 10`
# 실행결과 : 20
이 때, 반드시 유의해야할점은 + 연산을 반드시 띄어쓰기와 함께 사용해야 한다는 것이다.
필자는 이 사소한 차이로 인해, 왜 안되는걸까를 한참을 고민해야했다.
a=10
echo `expr $a+10`
# 실행결과 : 10+10
a=10
echo `expr $a + 10`
# 실행결과 : 20
예시 ) 하위 디렉터리별로 파일 세고 총 합 구하기.
이전 포스팅에서 다뤘던, 쉘 스크립트에 약간의 연산을 추가하여 하위 디렉터리에 총 몇개의 파일이 있는지 계산해보는 쉘 스크립트를 예시로 작성해보았다.
sum=0
for x in `find . -maxdepth 1 -mindepth 1 -type d -print`
do
num = `find $x -type f|wc -l`
echo $x, num;
done
echo $sum
반응형
'각종 Tips > Ubuntu' 카테고리의 다른 글
[Docker / Linux] 도커 볼륨에서 실수로 파일을 삭제했을 때 (0) | 2021.07.03 |
---|---|
[Docker / Linux] 도커 볼륨의 용량이 너무 클 때 해결법 (0) | 2021.07.03 |
[Ubuntu / 우분투] 하위 디렉토리별로 파일 개수 세기 (1) | 2021.06.28 |
[Ubuntu / 우분투] 메모리 사용량 조회하는 방법 (0) | 2020.11.15 |
[Ubuntu / 우분투] nvidia-smi 자동 갱신하기 (0) | 2020.11.15 |