0

ARGV の使用をスクリプトに統合したいと考えています。Stack Overflow で見つけた簡単な使用例をいじった後、スクリプトで単一のコマンド引数の使用を「強制」することができました。私が今望んでいることは、1 つではなく複数のフラグを許可することです。問題は、複数のフラグが使用されている場合、特定の順序でフラグを適用する必要があることです。

これは、単一の引数を実行してそれを強制するために私が思いついたコードです。

#!/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";
}
4

1 に答える 1

5

coreGetopt::Longモジュールを使用し、自分で引数を解析することについて心配する必要はありません。

複数の引数がある場合は、引数が言う順序で何でも行うのではなく、次の疑似コードのようなことを行うだけです。

if( option s is set ) {
  run setup stuff
}
if( option b is set ) {
  run backup stuff
}

-s -bスクリプトで asと notの引数を許可する理由はまったくありません-b -s。ユーザーは、-b -sそのセットアップが最初に行われ、次にバックアップが行われることを提供することを期待しています。スクリプトは十分にスマートでなければなりません。

于 2011-01-20T00:42:56.070 に答える