请帮帮我,如何在我的bash脚本中显示结果编号

时间:2013-05-20 10:53:03

标签: bash printf

我的剧本

 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中输入“0.1”而在$ bil2中输入“0.4”,结果是

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

如何在我的bash中显示结果??

3 个答案:

答案 0 :(得分:3)

您正在使用%d格式,这是针对整数的。 %f是浮点数的正确格式。 - 有关格式代码的完整参考,请参阅sprintf的手册页。 %'.1f可能就是你想要的(感谢Adrian指出这一点!)

错误地使用%d实际上不会导致printf失败,只会截断数字(例如0.4 - > 0),就像您所经历的那样。

还有一个小问题:第二个sed表达式缺少终止符(没有尾随/

答案 1 :(得分:0)

使用expr

jlh = expr $bil1 + $bil2将计算$ bil1 + $ bil2并将变量jlh设置为相同的

printf“你的结果:%d +%d =%d \ n”$ bil1 $ bil2 $ jlh

将根据需要打印结果

用于处理浮点数,你需要使用bc,它的解释很好 http://www.linuxjournal.com/content/floating-point-math-bash

答案 2 :(得分:0)

你应该使用bc作为例子。您可以将表达式传递给bc并使用bc的输出进行打印,因为bash不支持浮点数。

为简单起见,我选择了回显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的输出在该行开头的echo输出中输出:

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

在我的系统中,但正如其他人所说,你应该安装bc(如果没有安装的话)