2011-01-20 45 views
0

我想將ARGV的使用集成到我的腳本中。經過我在Stack Overflow上找到的一個簡單用法的例子後,我能夠使腳本「強制」使用單個命令參數。我現在想要的是允許多個標誌而不是一個標誌。如果存在多個使用標誌,則標誌需要以特定的順序執行。如何在指定標誌的特定順序時將命令行標誌與ARGV一起傳遞?

這是我爲了完成單個參數而執行的代碼。

#!/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

爲什麼他們必須按照特定的順序? – 2011-01-20 00:33:07

+0

因爲我不希望有人在'-s'(設置)之前嘗試運行'-b'(備份),因爲腳本會脫軌 – ianc1215 2011-01-20 00:38:59

回答

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設置將首先完成,然後備份,您的用戶會期望。你的腳本應該足夠聰明。