2014-09-23 25 views
2

利用bash通过float将一个整数与if语句相乘,我将在0.90之外进一步扩展这两个其他情况,只是试图学习基本知识。利用bash通过if语句使浮动乘以一个整数

#!/bin/bash 

echo -n "give me an integer: [ENTER]: " 
read that_integer 

if -n [ $that_integer <= 5000 ]; then 
awk print $that_integer*0.90 
done 

最终,这是我想出的代码。

谢谢!

#!/bin/bash 

echo "give me an integer: [ENTER]: " 
read that_integer 

if [ $that_integer -le 5000 ]; then 
awk -v x=$that_integer 'BEGIN { print x*0.90 }' < /dev/null 

elif [ $that_integer -gt 5000 -a $that_integer -le 50000 ]; then 
awk -v x=$that_integer 'BEGIN { print x*0.70 }' < /dev/null 

else 
awk -v x=$that_integer 'BEGIN { print x*0.40 }' < /dev/null 
fi 
done 
+0

+1对于早期的好问题。当然,你可以在1行awk中完成所有这些操作(在所有情况下只有1个进程创建),即'awk -vi = $ that_int'BEGIN {if(i <5000)print i * .9 else if( i> 5000 && i <= 50000)print i * .7 else print i * .4}'祝你好运,并保持观点。 – shellter 2014-09-23 22:30:16

回答

0

-n什么都不做;去掉它。

对于整数比较,使用-le

if [ $that_integer -le 5000 ]; then 

awk调用正确的语法是

awk -v x=$that_integer 'BEGIN { print x*0.90 }' < /dev/null 

if语句终止fi,不done

+0

你不需要在'awk'中使用' anubhava 2014-09-23 19:51:35

+2

对,但是用'BEGIN'则不需要它。 'awk -v x = 4'BEGIN {print 5 * x}''也可以。 – anubhava 2014-09-23 19:54:00

+0

啊,没有意识到如果唯一的规则是'BEGIN'规则,它会忽略标准输入。 – chepner 2014-09-23 19:54:12

0

如你所知,bash不能处理浮点数,但你可以重新施放此使用整数数学:

x=$((5000*90/100)) 

echo $x 
4500 

所以,只是踢:

#!/bin/bash 

echo "give me an integer: [ENTER]: " 
read that_integer 

multiplier=40 
[ $that_integer -le 5000 ] && multiplier=90 
[ $that_integer -gt 5000 -a $that_integer -le 50000 ] && multiplier=70 
echo $(($that_integer*$multiplier/100)) 
1

您可以使用在shell中执行浮点运算的bc实用程序。

echo "give me an integer: [ENTER]: " 
read that_integer 

if [ $that_integer -le 5000 ]; then 
    echo "$that_integer*0.90"|bc 
elif [ $that_integer -gt 5000 -a $that_integer -le 50000 ]; then 
    echo "$that_integer*0.70"|bc 
else 
    echo "$that_integer*0.40"|bc 
fi