2010-06-26 6 views
5

스크립팅에 몇 가지 문제가 있습니다 ... 누군가 나를 도울 수 있다면 정말 좋을 것입니다!쉘 스크립트의 산술 문제

VISITS=$((WR + RD)); 
SERVICE_DEMAND=$((VISITS*SERVICE_DEMAND)); 

을 그리고이 오류 받고 있어요 :

내 스크립트가

./calc_serv_demand.sh: line 12: 0.0895406: syntax error: invalid arithmetic operator (error token is ".0895406")

누군가가 나를 도울 수 있습니까?

정수로만 bash가 작동하기 때문에 생각합니다.하지만 float 값을 사용해야합니다. 미리

덕분


문제 해결 :

VISITS = $ ($ 에코 WR + $ RD | BC); echo $ VISITS

SERVICE_DEMAND = $ (echo $ VISITS '*'$ SERVICE_TIME | bc); echo $ SERVICE_DEMAND

답변

5

, 즉

echo $WR + $RD | bc 

등등.

+0

HUm ... 합계로 작동하지만 곱셈에 적합하지 않습니다. 내가 bc 매뉴얼을 확인했기 때문에 이상하게 보입니다. 보세요 : 내 스크립트 : echo $ WR + $ RD | BC &> 방문; VISITS = $ (echo $ WR + $ RD | bc); # 잘 작동합니다. echo $ VISITS SERVICE_DEMAND = $ (echo $ VISITS * $ SERVICE_TIME | bc); # 는 에코 이상한 오류를 반환 $ SERVICE_DEMAND 오류 : 0.0895406 3.42007 12.401 3.5096106 (standard_in) 1 : 구문 오류 (standard_in) 1 : 잘못된 문자 : K (standard_in) 1 : 잘못된 문자 : H (standard_in) 1 : 부적합한 문자 : T ... – Alucard

+0

@user :'*'는 쉘에 특별한 의미가 있으므로 '\\ *'또는''* ''를 써야합니다. 또한 'VISITS = $ (echo $ WR + $ RD | bc)'파일에 출력하는 대신 계산 결과를 변수에 직접 지정해야합니다. –

+0

@ user368453 :'*'를'echo'하면 현재 디렉토리의 모든 파일 이름을 표시합니다. 공식을 따옴표로 묶으면 작동합니다 :'SERVICE_DEMAND = $ (echo "$ VISITS * $ SERVICE_DEMAND"| bc)' –

2

bc을 사용하여 float calculations in Bash을 사용하십시오. 당신은 당신의 부동 소수점 계산을 수행하는 bc을 사용할 수 있습니다

1

스크립트에서 부동 소수점 연산을 수행하려면 bc과 같은 외부 프로그램을 사용해야합니다. 같은

뭔가 :

echo ($WR+$RD)*$SERVICE_DEMAND | bc

2

이 (소수점의 오른쪽에 대한 답변의 자리 수) 정밀도를 설정하려면, 쓰기 :

WR=5 
RD=7 
VISITS=$[WR+RD] 
SERVICE_DEMAND=.0895406 
SERVICE_DEMAND=`echo "scale=5; $VISITS * $SERVICE_DEMAND" |bc -l` 
echo Service Demand = $SERVICE_DEMAND 

이 출력 :

Service Demand = 1.0744872 

scale = 5은 5 자리의 정밀도를 설정합니다. 역 인용 부호는 포함 된 표현식을 으로 평가하고 출력 (bc -l)을 변수에 지정하게합니다.

+0

감사 하지만 ...이 그것은 다음과 같은 실수를 반환 -linux-gnu) – Alucard

+0

, 버전 4.0.35 (1) -release (i586 버전 - SUSE bc' –

+0

Alucard, 아마도 잘라 붙이기는 \ r \ n을 도입했을 것입니다. 복사본에 dos2unix scriptname을 시도하십시오. –

3

bc을 사용하는 대신 더 나은 프로그래밍 언어로 전환하는 것이 좋습니다. Bash는 단순히 수학에 적합하지 않습니다.

관련 문제