'<='和'> ='运算符不起作用

时间:2018-08-02 05:23:45

标签: ruby chef

要检查安装程序是否已安装,我做了:

installer not found

输出说:

11

但是如果已安装,它将显示10<=10 || >=11(任何数字)。如果输出为not installed,则它将显示def get_installer_linux_version begin cmd = Mixlib::ShellOut.new('installer status |grep Version| cut -c12-13') cmd.run_command rescue Errno::ENOENT => e return '0.0' end return 'Version 10' if cmd.stdout.include? '10' return 'Version 11' if cmd.stdout.include? '11' end ,然后继续安装。在库中,它给出:

if get_installer_linux_version.to_i <= 10 || get_installer_linux_version.to_i >= 11 
  log  'installer is installed'
else
  log 'installer is not installed so procceding with the installation'

在安装配方中是:

unsigned long *inputParameters

1 个答案:

答案 0 :(得分:2)

您的代码中有很多东西都可以被认为是有缺陷的,但是出于您的问题,我将着重于此。

get_installer_linux_version返回一些可能的值。字符串"version 10""version 11""0.0"nil。您调用此函数,然后在其上调用to_i

也许这将有助于阐明这一点:

"version 10".to_i
#=> 0

我将猜测这不是预期的行为。无论您的get_installer_linux_version中发生了什么,在您调用0之后,返回的字符串将始终为to_i。然后,您确定<= 10仍然小于0的{​​{1}},并记录10

我还敢冒险猜测使用"installer is installed"最终会在处理版本号时给您带来麻烦,但这是另一个问题。

为进一步说明,让我按照自己编写的代码编写代码,并始终如一,并查看是否看起来有些异常:

include? 'XX'

您期望结果是什么?尽管if 0 <= 10 || 0 >= 11 log 'installer is installed' else log 'installer is not installed so procceding with the installation' 永远不会大于11,但它总是小于0,因此您的结果始终相同。

只需将其放在此处,因为我越看您的样本就越有意义。

  • 10

      

    检查左操作数的值是否大于或等于   右操作数的值,如果是,则条件为真。

  • >=

      

    检查左操作数的值是否小于或等于该值   正确的操作数,如果是,则条件成立。