# 명령어 표현식

n=`date` # date 명령어의 실행 결과를 n 변수에 저장

n=$(date) # date 명령어의 실행 결과를 n 변수에 저장(위와 동일)

 

# 정수형 연산 표현식

declare -i n

n=10+20 # 또는 n="10 + 20" 띄어쓰기도 가능

 

# 정수현 연산 표현식

let n=10+20 # 또는 n="10 + 20" 띄어쓰기도 가능

 

# 정수현 연산 표현식

((n=10+20)) # let n=10+20 과 동일. 단, 띄어쓰기 불가능

 

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

모든 위치파라미터를 저장한다는 점에서는 동일하나, 쌍따옴표(")로 둘러쌓이면 다른 의미를 갖는다.

기억하기 쉽게 설명하자면, "$*"는 모든 파라미터를 한개의 문자열로 퉁치고, "$@"는 인용문자(', ")의 의미를 살려 파라미터를 배열로 취급한다.

다음의 예제를 실행해보면 쉽게 알 수 있다.

 

코드

all.sh

#!/bin/bash
set "hong gildong" jangbogo janggilsan
declare -i cnt=0
for i in $* # 이 부분을 $*, $@, "$*", "$#" 네가지로 변경하며 실행하면 차이를 알 수 있음
do
        echo $cnt
        echo $i
        cnt+=1
done

 

실행

./all.sh

 

 

결과

$*, $@ 인 경우

0
hong
1
gildong
2
jangbogo
3
janggilsan

 

"$*" 인 경우

0
hong gildong jangbogo janggilsan

 

"$@" 인 경우

0
hong gildong
1
jangbogo
2
janggilsa
블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,

리눅스 쉘스크립트는 기본적으로 변수를 문자열로 취급하기 때문에, 정수형 산술연산(-, +, *, /, % 등)을 하기 위해서는 아래의 세가지 방법을 사용할 수 있다.

 

1. 선언시 정수형으로 선언

declare -i 변수명

으로 변수 선언시, 해당 변수는 정수로 취급하며, 문자열을 넣으면 0이 된다. 기본값은 0이다.

이렇게 선언된 변수는 바로 산술연산이 가능하다.(산술식의 결과를 대입할 수도 있고, 변수끼리 산술연산도 가능하다)

e.g.

declare -i num

num=10+10

echo $num # 20이 출력됨

 

2. let 명령어 사용

declare -i 로 선언된 변수가 아니더라도,

let 산술연산 대입식

을 사용하여 산술연산이 가능하다.

e.g.

num=10

let num=num+10 # let "num = num + 10" 쌍따옴표로 묶어도 연산이 되며, 띄어쓰기도 넣을 수 있다.

echo $num # 20이 출력됨

 

3. 쌍괄호 사용

쌍괄호로 산술연산식을 감싸면 let 명령어를 사용한 것과 동일하다.

e.g.

num=10

((num=num+10)) # ((num = num + 10)) 띄어쓰기도 넣을 수 있다.

echo $num # 20이 출력됨

 

4. expr 명령어 사용

expr 값 연산자 값 or expr $[값 연산자 값]

e.g.

expr 10 + 20 # 30

expr 2 \* 3 # 6. *연산자를 와일드카드를 의미하므로 escape 해줘야 한다.

expr $[2 * 3] # expr $[2*3], echo $[2*3], echo $[2 * 3] 과 동일. $[] 로 감싸면 escape 할 필요 없다.

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,