2010-06-10 3 views
4

일반적으로 산술 연산을하기 위해 쉘 스크립트 내에서 expr을 사용합니다.쉘 스크립팅 산술

거기에 expr을 사용하지 않고 쉘 스크립트에서 산술 연산을 사용할 수있는 방법이 있습니까?

+0

대신에 "bc'를 사용하십시오"는 꽤 * 찾고있는 대답이 아닙니다 ... –

+0

@ignacio ... 용서할 수 있습니까? BC를 사용하는 방법의 예? – Vijay

+0

'PI = $ (echo "4 * a (1)"| bc -l)' –

답변

3

ksh를 사용하는 경우 "man ksh"를 읽으려고 했습니까?

예를 들어, "man bash"는 배쉬로 산술을 수행하는 것에 대한 충분한 정보를 가지고 있습니다.

typeset -i 명령을 사용하면 변수를 정수로 처리해야 함을 지정할 수 있습니다. 예를 들어 typeset -i MYVAR은 변수 MYVAR이 문자열이 아닌 정수가되도록 지정합니다. ,

$ typeset -i MYVAR 
    $ MYVAR=56 
    $ echo $MYVAR 
    56 
    $ MYVAR=fred 
    ksh: fred: bad number 
    $ 

변수 나 쉘 스크립트에서 산술 연산을 수행하려면하자 명령을 사용하여 조판 명령에 따라, 변수가 아닌 정수 값이 실패합니다 할당 할 시도합니다. 인수를 간단한 산술 표현식으로 평가합니다. 예를 들어

$ let ans=$MYVAR+45 
    echo $ans 
    101 
    $ 

상기로도 작성 될 수있는 표현은 다음과 같다 : $ ((과)) 내에 포함

$ echo $(($MYVAR+45)) 
    101 
    $ 

뭐든지 연산 식

+0

맨 페이지에서 아무 것도 찾지 못했습니다. – Vijay

+1

http://osr507doc.sco.com/en/OSUserG/_math_on_var_in_ksh.html http://www.bo.infn.it/alice/alice-doc/mll-doc/impgde/node18.html –

+0

감사합니다. 올바른 방향 zed – Vijay

4
것으로 Korn 쉘에 의해 해석되고

현대의 쉘 (내보기에 현대적인 POSIX 호환)은 산술 연산을 지원합니다. 부호가있는 긴 정수 변수 +/- 2147483647에 +/- *

배정도는 awk를 사용하고 15 자리는 sqrt입니다.

최대 유효 자릿수까지 확장 된 정밀도로 bc -l을 사용하십시오. 쉘

구문 (zed_0xff는) 이미 보았다

a=$((13 * 2)) 
a=$(($2/2)) 
b=$(($a - 1)) 
a=(($a + $b)) 

AWK를 double 정밀도로 수행 - 부동 소수점 - 기본적으로 산술 연산을. 또한 SQRT, 왜냐하면, 죄를 가지고 .... 참조 :

BC -l

:

http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html

BC는 -l 옵션과 함께 사용할 수있는 몇 가지 정의 함수 및 확장 presision있다

예 :

echo 'sqrt(.977)' | bc -l 
0

정밀도와 쉘의 범위는 $((<expr>))를 내장 플랫폼에 따라 달라집니다. 32 비트 플랫폼에서는 32 비트 정수로 제한됩니다 (expr과 달리 플랫폼에서 독립적 인 것처럼 보이는 더 큰 정수를 지원하는 것으로 보입니다).

(N.B -. 오히려 XOR을 ^ 대부분 껍질에 유효한 운영자 동안, 그것은 '의 능력'을 의미하지 않는다는 것을 조심하지만)

또한 - 일부 쉘은이 점에서 더 곧 출시됩니다.예를 들어, Zsh는 부동 소수점 연산을 허용합니다. $((10/3.0))