我想将ARGV的使用整合到我的脚本中。在弄乱我在Stack Overflow上发现的一个简单用法示例后,我能够使脚本“强制”使用单个命令args。我现在想要的是允许多个标志而不是一个。如果有多个使用标记,则需要按特定顺序强制执行标记。
以下是我提出的用于执行单个args并执行它的代码。
#!/usr/bin/perl
use strict;
use warnings;
system ("clear");
print "Solignis's Discovery Script v0.6 for ESX\\ESX(i) 4.0+\n\n";
my $numargs = $#ARGV + 1;
if ($#ARGV < 0) {
help_menu();
}
foreach my $argval (0 .. $#ARGV) {
if (($#ARGV == 0) && ($ARGV[0] eq '-b')) {
print "Backup\n";
} elsif (($#ARGV == 0) && ($ARGV[0] eq '-d')) {
print "Discovery\n";
} elsif ((($#ARGV == 0) && ($ARGV[0] eq '-h') || ($#ARGV == 0) && ($ARGV[0] eq '-?'))) {
help_menu();
} elsif (($#ARGV == 0) && ($ARGV[0] eq '-s')) {
print "Setup\n"
}
}
if ($#ARGV >= 1) {
print "Too many arguments, only one argument may be passed at a time!\n";
}
sub help_menu {
print "Options:\n\n";
print "\t-b\tRun Backup Backup\n";
print "\t-d\tRun Discovery Script\n";
print "\t-h\tShow Help Menu\n";
print "\t-s\tRun Setup Script\n\n";
}
答案 0 :(得分:5)
使用核心Getopt::Long
module,不要担心自己解析参数。
如果你有多个参数,而不是按照他们说的顺序做任何他们说的话,你只需要做类似下面的伪代码:
if( option s is set ) {
run setup stuff
}
if( option b is set ) {
run backup stuff
}
您的脚本绝对没有理由允许参数-s -b
而不是-b -s
。您的用户会希望,如果他们提供-b -s
,则首先进行设置,然后进行备份。你的脚本应该足够聪明。