728x90

산술연산자 쓰는 여러가지방법

 

1. let "n = $n +1"

2. let "n= n + 1"

3. : $((n = $n + 1))

4. : $[ n = $n + 1 ]

 

":" 가 없을시 Bash가 3번 4번 연산자를 명령어로 해석하려고하기때문에 : 가 필요하다.

 

echo -n "$n "

 

n=$[ $n + 1]

비트 연산자(bitwise operators). 비트 연산자는 쉘 스크립트에서 자주 쓰이지 않습니다. 이런 연산자들은 주로 포트나 소켓에서 값을 읽고 테스트하고 조작하는데 쓰입니다. "비트 조작(bit flipping)"은 C나 C++ 처럼 실행중에 비트연산을 할 수 있을 정도로 충분히 속도가 빠른 컴파일 언어가 더 알맞습니다.

비트 연산자

<<

비트 왼쪽 쉬프트(쉬프트 한 번당 2를 곱하는 것과 동일함)

<<=

"left-shift-equal"

let "var <<= 2"  var를 2 비트만큼 왼쪽으로 쉬프트(4 를 곱하는 것과 동일함)

>>

비트 오른쪽 쉬프트(쉬프트 한 번당 2로 나눔)

>>=

"right-shift-equal"(<<=와 반대)

&

비트 and

&=

"비트 and-equal"

|

비트 OR

|=

"비트 OR-equal"

~

비트 negate

 

!

비트 NOT

^

비트 XOR

^=

"비트 XOR-equal"

 

, 콤마 연산자(comma operator)

 

콤마 연산자는 두개 이상의 산술 연산을 묶어 줍니다. 이 연산자로 묶인 모든 연산은 부효과(side effects)가 생길 가능성을 가지고 평가되고 제일 마지막 연산의 결과만 리턴됩니다.

 

숫자 상수(Numerical Constants)

 

쉘 스크립트는 특별한 접두사나 표기법이 없다면 숫자를 10진수로 해석합니다.

 

만약에 숫자 앞에 0이 있다면 8진수(8진법)이고, 0x가 있따면 16진수(16진법)입니다.

 

#이 들어간 숫자는 진법#숫자로 계산됩니다.

 

 

변수를 조작하거나 확장시키기

 

${parameter}

ㄴ 변수인 parameter의 값이란 뜻으로써, $parameter라고 한 것과 같습니다.

 

${parameter_default}

ㄴ 매개변수가 세트되지 않았다면 default 사용

${parameter=default}, ${parameter:=default}

ㄴ 매개변수가 세트 되어 있지 않다면 기본값으로 세트.

두 형태는 거의 비슷하지만 :이 있을때는 위의 경우처럼 $parameter가 선언만 되고 값이 널일 경우에도 기본값으로 세트 시킨다는 차이점이 있습니다.

 

${parameter+alt_value}, ${parameter:+alt_value}

매개변수가 세트되어 있다면 alt_value를 쓰고 아니라면 널 스트링을 씁니다.

이 두 형태는 거의 비슷하지만 parameter가 선언되고 널일 경우에 :이 있고 없고의 차이가 나타납니다. 아래를 보세요.

변수 길이/문자열조각(substring) 삭제${#var}

문자열 길이 ($var의 문자 갯수). 배열의 경우에, ${#array}라고 하면 배열의 첫번째 요소의 길이를 알려줍니다.

참고: 예외:

  • ${#*}  ${#@}  위치 매개변수의 갯수를 알려줍니다.
  • 배열에 대해 ${#array[*]}  ${#array[@]} 라고 하면 배열 요소의 갯수를 알려줍니다.

${var#pattern}, ${var##pattern}

$pattern이 $var의 앞 부분과 가장 길거나 가장 짧게 일치하는 부분을 삭제.

${var%pattern}, ${var%%pattern}

$pattern이 $var의 뒷 부분과 가장 짧거나 가장 길게 일치하는 부분을 삭제.

변수 타입 지정: declare  typeset

declare typeset 내장 명령(이 둘은 동의어입니다.) 키워드는 변수의 특성을 제한할 수 있습니다. 이것은 몇몇 프로그래밍 언어에서 볼 수 있는 불완전한 형태의 타입 지정입니다. declare 명령어는 bash 버전 2 이후부터 가능합니다. typeset 명령어는 ksh 스크립트에서도 가능합니다.

 

declare/typeset 옵션

 

-r 읽기 전용

 

(declare -r var1 는 readonly var1 과 똑같이 동작합니다.)

 

C에서 cost 형한정어(qualifier)와 거의 비슷하고, 이런 변수의 값을 바꾸력 하면 에러 메세지가 납니다.

 

-i 정수

-a 배열

 

-f 함수

-x export

var=$value

 

변수 간접 참조

 

어떤 변수값이 다음에 나올 변수의 이름이라고 가정해봅시다. 그렇다면 그 어떤 변수로 다음 나올 변수의 값을 알아낼 수 있을까요? 이는 우리 생각처럼 제대로 동작을 하고 이를 간접 참조라고 부릅니다.

간접참조 a=\$$a

 

이중 소괄호 (The Double Parentheses Construct)

 

728x90

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

10~ / 루프  (0) 2022.03.03
9~ / 변수 재검토  (0) 2022.03.03
7~ 테스트  (0) 2022.03.03
6~ / #쿼우팅  (0) 2022.03.02
5. / # 변수와 매개변수 소개  (0) 2022.03.02

+ Recent posts