如何将bash中的While / Case语句转换为perl

这是bash中的循环:   而[$#-ge 1];做     案件1美元     -一个)       转移       NUM_AGENTS = $ 1       ;;     -H)       转移       HOST_NAME = $ 1       ;;     -t)       转移       TIME_STAGGER = $ 1       ;;     -联合国)       转移       USER_NAME = $ 1       ;;     -pw)       转移       USER_PASS = $ 1       ;;     -p)       转移       TARGET_PAGE = $ 1       ;;     -s)       转移       COMMON_SID = $ 1       ;;     ESAC     转移   DONE 我如何在perl中转换它,以便参数将填充命令行中的值 php loadAgent_curl.php $ NUM_AGENTS $ HOST_NAME $ procStartTime $ i $ TARGET_PAGE $ reqlogfile $ resplogfile $ USER_NAME $ USER_PASS $ execDelay $ COMMON_SID& -------追加问题: 这肯定有帮助,我真的很感激,有没有办法在getOptions之外访问这些参数?这是剩下的bash脚本:my $ i =“0”; 我的$ startTime =
date +%s
; 开始时间= $ [$ STARTTIME + $ NUM_AGENTS + 10] 我的$ PWD =
pwd
; 我的$ logdir =“ $ PWD / load-logs”; system(mkdir $ logdir / $ startTime); my $ reqlogfile =“$ logdir / $ startTime / req.log”; my $ resplogfile =“$ logdir / $ startTime / resp.log”; 打印“ n”; print“################## n”; 打印“发出请求 n”; 打印“主机名: $ HOST_NAME n”; 打印“TARGET PAGE: $ TARGET_PAGE n”; 打印“#AGENTS: $ NUM_AGENTS n”; 打印“执行时间: $ startTime(随机错开0到 $ TIME_STAGGER秒) n”; print“REQ LOG FILE:$ reqlogfile n”; 打印“RESP LOG FILE:$ resplogfile n”; print“################## n”; 打印“ n”; # # highestStart = $开始时间 $ startTime + = $ ARGV [0] + 5; 我的$ dTime = localtime($ startTime); 打印“ n ################## n n n启动请求 n        COUNT:$ ARGV [0] n        延迟:| 1 n        脚本将在以下位置触发:$ dTime n ################## n n“; 而($ ARGV [0]> $ i) {     $ I ++;     system(“php avtestTimed.php $ ARGV [0] $ ARGV [2] $ startTime”);     打印“RUN系统('php avtestTimed.php $ ARGV [0] $ ARGV [2] $ startTime'); n”;     睡1; } # # 而[$ NUM_AGENTS -gt“$ i”] 做   I = $ [$ I + 1]   execDelay = $((RANDOM%$ TIME_STAGGER))“。”$((RANDOM%100))   procStartTime = $ [$ STARTTIME]   procStartTime = $ [$ STARTTIME + $ execDelay]   如果[$ procStartTime -gt $ highestStart]   然后     highestStart = $ procStartTime   科幻   echo“STATUS:排队请求$ i,延迟为$ execDelay秒” echo“' - >命令:php loadAgent_curl.php $ NUM_AGENTS $ HOST_NAME $ procStartTime $ i $ TARGET_PAGE $ reqlogfile $ resplogfile $ USER_NAME $ USER_PASS $ execDelay $ COMMON_SID” php loadAgent_curl.php $ NUM_AGENTS $ HOST_NAME $ procStartTime $ i $ TARGET_PAGE $ reqlogfile $ resplogfile $ USER_NAME $ USER_PASS $ execDelay $ COMMON_SID&   睡觉1 DONE echo“STATUS:等待排队的请求准备好” 而[
date +%s
-lt $ startTime] 做   睡觉1 DONE # echo“STATUS:等待最后一次发出请求” 而[
date +%s
-lt $ highestStart] 做   睡觉1 DONE # 回声“状态:发出最后回复” # echo“STATUS:等待创建响应日志文件” 而[! -e“$ resplogfile”] 做  睡觉1 DONE # 而[
wc -l "$resplogfile"| awk '{print $1'}
-lt $ NUM_AGENTS] 做   #echo“(记录了$ NUM_AGENTS个回复的
wc -l "$resplogfile"| awk '{print $1'}
)”   睡觉1 DONE 回声“状态:完成” 而真实;做     read -p“你想查看请求日志吗?[y / n]”yn     案件$ yn in         [Yy] *)cat $ reqlogfile;打破;;         [Nn] *)退出;;         *)回音“请回答是或否。”;;     ESAC DONE 而真实;做     read -p“你想查看响应日志吗?[y / n]”yn     案件$ yn in         [是] *)cat $ resplogfile;打破;;         [Nn] *)退出;;         *)回音“请回答是或否。”;;     ESAC DONE     
已邀请:
Getopt::Long
库是处理命令行选项的标准Perl方法。 这样的东西会起作用。未经测试 - 请注意! 请注意,由于您的PHP参数是命令行选项和一些未识别的变量之间的混合,我设计了第一个示例,以便所有可能的选项应存储在
%args
散列中(例如,您的程序应使用
$args{procStartTime}
而不是
$procStartTime
)。这使我能够做到非常简短和通用。 如果这很难阅读/理解,我还有第二个例子,它更简单但不那么通用
use Getopt::Long;
my @php_arg_order = qw(a h procStartTime i p reqlogfile 
                       resplogfile un pw execDelay s);

my %args = map {$_ => ""} @php_arg_order;

$args{procStartTime} = "something";
$args{reqlogfile} = "a.log"; 
# More defaults for variables NOT passed in via command line. 
# Populate them all in %args as above.

# Now load actual command line parameters.
GetOptions(%args, map { "$_=s" } @php_arg_order) or die "Unknown parameter!n";

system(join(" ", 
            "php", "loadAgent_curl.php",map { $args{$_} } @php_arg_order}, "&"));
第二个不太先进但更直接的选择是:
use Getopt::Long;

my %args = ();

# Now load actual command line parameters.
GetOptions(%args, 
   "NUM_AGENTS|a=s"
  ,"HOST_NAME|h=s"
  ,"USER_NAME|un=s"
  # ... the rest of options
  # The "XXX|x" notaion allows using alias "-x" parameter
  # but stores in $args{XXX} instead for better readability
) or die "Unknown parameter!n";

system("php loadAgent_curl.php $args{NUM_AGENTS} $args{HOST_NAME} $procStartTime $i $args{TARGET_PAGE} $reqlogfile $resplogfile $args{USER_NAME} $args{USER_PASS} $execDelay $args{COMMON_SID} &");
    

要回复问题请先登录注册