Kir*_*ran 19 unix linux bash shell
你能否告诉我在Bash脚本中进行浮点比较的语法?理想情况下,我喜欢将它作为if陈述的一部分.这是一个小代码片段:
key1="12.3"
result="12.2"
if (( $result <= $key1 ))
then
# some code here
fi
Run Code Online (Sandbox Code Playgroud)
Che*_*evy 57
bc 是你的朋友:
key1="12.3"
result="12.2"
if [ $(bc <<< "$result <= $key1") -eq 1 ]
then
# some code here
fi
Run Code Online (Sandbox Code Playgroud)
注意这里有点模糊的string(<<<)表示法,作为一个很好的替代echo "$result <= $key1" | bc.
此外,未bash类似的bc版画1为真和0为假.
gho*_*g74 18
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
Run Code Online (Sandbox Code Playgroud)
还有其他可以执行浮动的shell,比如zsh或ksh,你也可以尝试使用它们
与bc另一个简单明了的方法是:
if ((`bc <<< "10.21>12.22"`)); then echo "true"; else echo "false"; fi
Run Code Online (Sandbox Code Playgroud)
使用的exit()功能awk使其几乎可读。
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
Run Code Online (Sandbox Code Playgroud)
注意,[由于if已经使用了退出值,因此不需要重用运算符。