这是bash中的循环:
while [ $# -ge 1 ]; do case $1 in -a) shift NUM_AGENTS=$1 ;; -h) shift HOST_NAME=$1 ;; -t) shift TIME_STAGGER=$1 ;; -un) shift USER_NAME=$1 ;; -pw) shift USER_PASS=$1 ;; -p) shift TARGET_PAGE=$1 ;; -s) shift COMMON_SID=$1 ;; esac shift 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"; my $startTime=date +%s
; startTime=$[$startTime+$NUM_AGENTS+10] my $PWD=pwd
; my $logdir="\$PWD/load-logs"; system(mkdir $logdir/$startTime); my $reqlogfile="$logdir/$startTime/req.log"; my $resplogfile="$logdir/$startTime/resp.log";print "\n"; print "##################\n"; print "LAUNCHING REQUESTS\n"; print " HOST NAME : \$HOST_NAME\n "; print " TARGET PAGE : \$TARGET_PAGE\n "; print " # AGENTS : \$NUM_AGENTS\n "; print " EXECUTION TIME : \$startTime (with random stagger between 0 and \$TIME_STAGGER seconds)\n "; print " REQ LOG FILE : $reqlogfile\n "; print " RESP LOG FILE : $resplogfile\n "; print "##################\n"; print "\n"; # # highestStart=$startTime
$startTime += $ARGV[0] + 5; my $dTime = localtime( $startTime ); print "\n##################\nLAUNCHING REQUESTS\n COUNT: $ARGV[0]\n DELAY: | 1 \n The scripts will fire at : $dTime\n##################\n\n"; while ( $ARGV[0] > $i ) { $i++; system("php avtestTimed.php $ARGV[0] $ARGV[2] $startTime"); print "RUN system('php avtestTimed.php $ARGV[0] $ARGV[2] $startTime'); \n"; sleep 1; }
# # while [ $NUM_AGENTS -gt "$i" ] do i=$[$i+1] execDelay=$((RANDOM % $TIME_STAGGER))"."$((RANDOM % 100)) procStartTime=$[$startTime] procStartTime=$[$startTime+$execDelay] if [ $procStartTime -gt $highestStart ] then highestStart=$procStartTime fi echo "STATUS: Queueing request $i with a delay of $execDelay seconds"
echo " '--> COMMAND: 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 & sleep 1 done
echo "STATUS: Waiting for queued requests to be ready" while [
date +%s
-lt $startTime ] do sleep 1 done # echo "STATUS: Waiting for last request to issue" while [date +%s
-lt $highestStart ] do sleep 1 done # echo "STATUS: Last response issued" # echo "STATUS: Waiting for response log file to be created" while [ ! -e "$resplogfile" ] do sleep 1 done # while [wc -l "$resplogfile"| awk '{print $1'}
-lt $NUM_AGENTS ] do #echo "(wc -l "$resplogfile"| awk '{print $1'}
of $NUM_AGENTS responses recorded)" sleep 1 done echo "STATUS: FINISHED"while true; do read -p "Do you wish to view the request log? [y/n]" yn case $yn in [Yy]* ) cat $reqlogfile; break;; [Nn]* ) exit;; * ) echo "Please answer yes or no.";; esac done
while true; do read -p "Do you wish to view the response log? [y/n]" yn case $yn in [Yy]* ) cat $resplogfile; break;; [Nn]* ) exit;; * ) echo "Please answer yes or no.";; esac done
答案 0 :(得分:2)
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} &");