2014-09-23 28 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