Bash:检查一个十进制数是否大于另一个十进制数

Bash:检查一个十进制数是否大于另一个十进制数,bash,Bash,我有这样一个案例: string1="some_string" string2="some_string" int1="0.87" int2="${var}" $var是其他脚本的输出,其格式为0.994343123或0.3454657或以0开头的任何内容。最大值约为0.9972343 现在,我不知道bash是如何工作的,但通常字符串0.87从不小于或等于0.999999,它们只是不同而已 我需要这样的伪代码: if (string1 equals string2 and int1 is le

我有这样一个案例:

string1="some_string"
string2="some_string"
int1="0.87"
int2="${var}"
$var是其他脚本的输出,其格式为0.994343123或0.3454657或以0开头的任何内容。最大值约为0.9972343

现在,我不知道bash是如何工作的,但通常字符串0.87从不小于或等于0.999999,它们只是不同而已

我需要这样的伪代码:

if (string1 equals string2 and int1 is less than int2):
    do something;
else
    do something else.
我所期望的是0.87687大于0.87,对吗??我从来都不擅长数学

有谁能帮我写下密码吗

提前谢谢

由于bash不处理浮点运算,因此可以使用bc-l比较2个浮点数,并将条件与&&as连接起来:

由于bash不处理浮点运算,因此可以使用bc-l比较2个浮点数,并将条件与&&as连接起来:


如果值介于0和1之间,则字符串比较将起作用

s1=..; s2=..
v1="0.876"; v2="0.87"
[[ $s1 = $s2 && $v1 > $v2 ]] && echo yes || echo no 

如果值介于0和1之间,则字符串比较将起作用

s1=..; s2=..
v1="0.876"; v2="0.87"
[[ $s1 = $s2 && $v1 > $v2 ]] && echo yes || echo no 
您可以用替换最后一行

if (($(echo $a '<' $b|bc))); then echo 'a<b'; fi
但依我看,它的可读性较差

您可以用替换最后一行

if (($(echo $a '<' $b|bc))); then echo 'a<b'; fi


但是它的可读性较差

0.87实际上小于0.876454。0.87 - 0.876 < 0. 在bash中,您可以使用-gt或-lt来比较变量。如果所有数字都在0和1之间,字符串排序将起到数字排序的作用。@JoachimHuet oh,抱歉,是的,我刚刚看到了我所写内容的愚蠢之处:@karakfa yea,抱歉,我想说0876大于0,87以错误类型命名变量是一个坏习惯。如果它们不是整数,请不要命名它们,因为0.87实际上小于0.876454。0.87 - 0.876 < 0. 在bash中,您可以使用-gt或-lt来比较变量。如果所有数字都在0和1之间,字符串排序将起到数字排序的作用。@JoachimHuet oh,抱歉,是的,我刚刚看到了我所写内容的愚蠢之处:@karakfa yea,抱歉,我想说0876大于0,87以错误类型命名变量是一个坏习惯。如果它们不是int,请不要这样命名。请您解释一下,如果您使用的是bash,$bc-l,那么您会选择[…]]而不是旧的[…],因为[运行一个单独的进程,但是[…]]是bash内部构造。bc-l本质上是与运算符相等的数学表达式。为了进行比较,bc返回1 true或0 false,因此$bc-l学习所有bash和shell脚本的细微差别有点像是走到了互联网的尽头。你学的越多,你就必须学的越多…如果你在做任何事情的话Linux、Unix或mac然后学习bash它和POSIX shell之间的区别,如Bourne shell、ash和dash,以及实用程序find、grep、sed、awk等…花费的时间很长。祝你在第6天好运。如果你使用bash,你能解释一下$bc-l是什么吗?然后你会选择[…]而不是旧的[…]因为[运行单独的进程,但[…]是bash内部构造。bc-l本质上是与运算符相等的数学表达式。为了进行比较,bc返回1 true或0 false,因此$bc-l学习所有bash和shell脚本的细微差别有点像是走到了互联网的尽头。你学的越多,你就必须学的越多…如果你在做任何事情的话Linux、Unix或mac然后学习bash它和POSIX shell之间的区别,如Bourne shell、ash和dash,以及实用程序find、grep、sed、awk等。时间花得很好。祝你在第6天好运。咯咯地笑,但是是的,lexigraphic排序也很有效。而且不仅仅是0到1之间的值不起作用……不知怎么搞砸了m的其余部分y脚本,并将所有内容输出为Failed,而不是Passed。我肯定存在一些限制,但请理解>是一个bash字符串比较运算符,如果string1按字典顺序在string2之后排序,则为True。基本上,测试876在87之后排序,它与ab之后的abc排序类似。等效的是,只有数字被规范化为左z例如,ero填充整数,或者此处填充为all小于1。一般来说,它在11'<2压缩后不起作用,但是是的,lexigraphic排序也起作用。而且不仅仅是0到1Doesn之间的值不起作用……不知怎的,我的脚本的其余部分都被弄乱了,所有内容都以失败而不是通过的形式输出。我肯定存在一些限制,但是我不理解>是一个bash字符串比较运算符,其中如果string1按字典顺序在string2之后排序,则为True。基本上测试876在87之后排序,这与ab之后的abc排序类似。等效的只有整数的数字被标准化为左零填充,例如,或者在这里,因为所有数字都小于1。通常情况下,它不起作用nce 11'<2