您能否給我建議在Bash腳本中進行浮點比較的語法?我希望將它用作if
聲明的一部分。這裏是一個小的代碼片段:Shell腳本中的浮點比較
key1="12.3"
result="12.2"
if (($result <= $key1))
then
# some code here
fi
您能否給我建議在Bash腳本中進行浮點比較的語法?我希望將它用作if
聲明的一部分。這裏是一個小的代碼片段:Shell腳本中的浮點比較
key1="12.3"
result="12.2"
if (($result <= $key1))
then
# some code here
fi
的bash沒有做花車,用awk
key1=12.3
result=12.5
var=$(awk 'BEGIN{ print "'$key1'"<"'$result'" }')
# or var=$(awk -v key=$key1 -v result=$result 'BEGIN{print result<key?1:0}')
# or var=$(awk 'BEGIN{print "'$result'"<"'$key1'"?1:0}')
# or
if [ "$var" -eq 1 ];then
echo "do something"
else
echo "result more than key"
fi
還有其他的殼可以做花車,喜歡的zsh或ksh,你可能想使用嘗試他們以及
bc
是你的朋友:
key1="12.3"
result="12.2"
if [ $(bc <<< "$result <= $key1") -eq 1 ]
then
# some code here
fi
注意有些OBS治療這裏字符串(<<<
)符號,作爲echo "$result <= $key1" | bc
的不錯選擇。
此外,未bash類似的bc
打印1
爲真正和0
爲假。
發誓..這是好的.. – Kiran 2010-03-11 12:32:15
bc(或者甚至dc)對此很有幫助,比awk方法更容易閱讀,但這樣做需要一個子shell(或一個管道)。在效率方面,expr更好,我也覺得它更易於閱讀。但是,BC的+1! – Sorpigal 2010-03-11 12:35:18
如果你的意思是「比awk更容易閱讀」的意思是它更短,那是因爲我將shell變量與awk變量分開。我也可以這樣寫'var = $(awk'BEGIN {print''$ result'「<」'$ key1'「?1:0}') ' – ghostdog74 2010-03-11 12:42:17
使用的awk
的exit()
功能使得它幾乎可讀。
key1=12.3
result=12.5
# the ! awk is because the logic in boolean tests
# is the opposite of the one in shell exit code tests
if ! awk "{ exit ($result <= $key1) }" < /dev/null
then
# some code here
fi
請注意,有沒有需要重用[
操作員if
已經使用了退出值。
與BC另一個簡單明確的方法是這樣的:
if ((`bc <<< "10.21>12.22"`)); then echo "true"; else echo "false"; fi
### The funny thing about bash is this:
> AA=10.3
> BB=10.4
> [[ AA > BB ]] && echo Hello
> [[ AA < BB ]] && echo Hello
Hello
是的,我知道這是欺騙,但它的工作原理。科學記數法在這裏不起作用。
宇可以使用內部的此AWK比較if語句,將打印1(真),如果該條件爲真否則爲0(假),並且這些值將被如果
if (($(awk 'BEGIN {print ("'$result'" <= "'$key1'")}'))); then
echo "true"
else
echo "false"
fi
被解釋爲布爾瓦爾斯
聽起來像是時候用不同的shell腳本語言編寫腳本了。你可能會喜歡Python。 – 2010-03-11 12:22:19
@Roger:別小看慶典,它比人們想象的是經常有很多更強大的..除了,你知道,處理花車.. :) – falstro 2010-03-11 12:23:30
@Roger不是真的... – ghostdog74 2010-03-11 12:23:49