这是我写的一个小测试脚本:
#!/usr/bin/env ruby
require 'packetfu'
def mac(host)
if host
rmac = PacketFu::Utils.arp(host, :iface => 'wlan0')
puts rmac
else
whoami = PacketFu::Utils.whoami?(:iface => 'wlan0')
puts whoami
end
end
mac(ARGV[0])
我想要做的是如果没有指定参数,则打印第二个变量。相反,我得到一个ArgumentError。显然,我只是缺少一种更简单的方式。
答案 0 :(得分:4)
如果您希望能够在没有任何参数的情况下调用该函数,则需要将其定义更改为不需要参数。一种方法是为参数赋予默认值。然后你可以检查一下,例如,
def mac(host = nil)
if host
puts "host: #{host}"
else
puts 'no host'
end
end
如果你想区分给定的参数和给定的参数与默认值,你可以使用可变数量的参数:
def mac2(*args)
if args.empty?
puts "no arguments"
else
host = args[0]
end
end
另一方面,如果您的问题是检测ARGV
是否为空(即,没有给出命令行参数),您可以检查更高的值。例如,如果给出了参数,则只调用mac
:
if ARGV.empty?
puts "Usage: …"
exit 1
end
mac(ARGV[0])