2013-05-20 3 views
-1

내 스크립트제발 도와주세요, 어떻게 내 bash는 스크립트 결과 번호를 표시합니다

echo -n "number 1 : "; 
read bil1 
echo -n "number 2 :"; 
read bil2 
jlh=$(echo $bil1 + $bil2 |bc -l |sed -e 's/^\./0./' -e 's/^-\./-0' -e 's/\.0*$//'); 
printf "Your result : %d + %d = %'d\n" $bil1 $bil2 $jlh 

경우 $ bil1에서 I 입력 "0.1"와 "0.4"$ bil2에, 결과는

line 24: printf: 0.1: invalid number 
line 24: printf: 0.4: invalid number 
line 24: printf: 0.5: invalid number 
Your result : 0 + 0 = 0 
입니다

내가 원하는 :

Your result : 0.1 + 0.4 = 0.5 

어떻게 내 떠들썩한 파티에서 그 결과를 보여 ??

+0

'bash'를 BC를 설치해야합니다 : 그 라인의이 출력 수레를 지원하지 않으므로 예를 들어를 사용하여 리조트에 가야합니다. 'bc' (또는 당신을 위해 일하는 다른 외부 계산기). 옵션이라면 기본적으로 수레를 지원하는'ksh'를 사용할 수 있습니다. [here] (http://stackoverflow.com/a/16387076/612462)도 참조하십시오. –

+0

중복 : http://stackoverflow.com/q/16385877/612462 –

답변

0

사용 EXPR

JLH = $ bil1 + $ bil2을 계산하고 printf와 같은

에 변수 JLH을 설정합니다 expr $bil1 + $bil2 "당신의 결과 : % d 개 + % D = % d 개 \ n을"$ bil1 $ bil2 $ JLH

는 BC를 사용할 필요가 부동 소수점 숫자로 작업이

을 원하는대로 결과를 출력 할 것이다, 그 잘 http://www.linuxjournal.com/content/floating-point-math-bash

설명 0
+0

하지만 정수형에 대해서만 expr ??? 결과가 0.5 – user2326650

3

정수의 경우 %d 형식을 사용하고 있습니다. %f은 부동 소수점에 대한 올바른 형식입니다. - 형식 코드에 대한 전체 참조는 sprintf의 맨 페이지를 참조하십시오. %'.1f이 여기에 있습니다.

이 실수를 사용하면 실제로 printf가 실패하지 않고 경험 한 것처럼 숫자 (예 : 0.4 -> 0) 만 자릅니다.

는 사소한 문제가 있습니다 : 두 번째 sed 표현

+0

이 되길 원하지만 내 bash 스크립트가 정수 및 부동 소수점을위한 것일 때 – user2326650

+1

정확한 문자열을 유지하기 때문에 실제로 문자열 ('% s')로 포맷하고 싶을 것입니다. '% d'과'% f'는 어느 정도 입력 내용을 다시 포맷합니다. 정확한 텍스트가 보존되기를 원하는 것처럼 보입니다.이 경우 '정수'또는 '수레'가 아닌 '문자열'이라고 생각해야합니다. – kampu

+0

@kampu : 지시어의'''은 GNU (?) 확장자로, 그 순간 의미가 나를 벗어납니다. – chepner

0

당신은 예를 들어 BC를 사용한다 (NO / 후행) 터미네이터가 없습니다. bash는 부동 소수점 수를 지원하지 않으므로 표현식을 bc로 파이프하고 bc의 출력을 사용하여 인쇄 할 수 있습니다.

나는 편의상의 printf를 통해 에코 선택한

#!/bin/bash 

echo -n "number 1 : "; 
read bil1 
echo -n "number 2 :"; 
read bil2 

echo "$bil1 + $bil2 = $(echo "$bil1 + $bil2" | bc)" 
마술 (magick) 여기 $(echo "$bil1 + $bil2" | bc) 부분 우리 관이 bc에 원하는 시작시의 에코 출력에 BC의 출력을 사용하는 표현에서 발생

내 시스템에서

number 1 : 0.1 
number 2 :0.4 
0.1 + 0.4 = .5 

을하지만, 다른 사람에 의해 언급 된 (당연히 설치되지 않은 경우)는

관련 문제