#!/bin/bash
i="0"
echo ""
echo "##################"
echo "LAUNCHING REQUESTS"
echo " COUNT: $2 "
echo " DELAY: $3 "
echo " SESSID: $1"
echo "##################"
echo ""
while [ $2 -gt "$i" ]
do
i=$[$i+1]
php avtest.php $1 $4 &
echo "EXECUTING REQUEST $i"
sleep $3
done
这是bash中更好/修改过的脚本
#!/bin/bash
i="0"
#startTime=`date +%s`
startTime=$(date -u +%s)
startTime=$[$startTime+$1+5]
#startTime=$($startTime+$1+5)
dTime=`date -d @$startTime`
echo ""
echo "##################"
echo "LAUNCHING REQUESTS"
echo " COUNT: $1 "
echo " DELAY: 1 "
#echo " EXECUTION: $startTime "
echo " The scripts will fire at : $dTime "
echo "##################"
echo ""
while [ $1 -gt "$i" ]
do
i=$[$i+1]
php avtestTimed.php $1 $3 $startTime &
echo "QUEUEING REQUEST $i"
sleep 1
done
答案 0 :(得分:4)
这是直接翻译
#!/usr/bin/env perl
use strict;
use warnings;
print <<HERE;
##################
LAUNCHING REQUESTS
COUNT: $ARGV[1]
DELAY: $ARGV[2]
SESSID: $ARGV[0]
##################
HERE
my $i = 0;
while($ARGV[1] > $i){
$i += 1;
system("php avtest.php $ARGV[0] $ARGV[3] &");
print "EXECUTING REQUEST $i\n";
sleep $ARGV[2];
}
但是将命令行参数读入以它们所用的名称命名的变量更有意义,而不是依赖于记住参数排序。
转换中的简要勘误表:
我使用here字符串来表示多行文字。我也可以使用多个print
语句来更接近地模仿bash版本
在bash中,参数作为编号变量访问,从$ 1开始向上。在Perl中,参数列表由数组@ARGV表示,该数组从零开始编号(与大多数语言中的数组一样)。在bash和Perl中,脚本的名称可以在变量$ 0中找到。
在引用整个数组时,Perl数组写为@arrayname
,但在访问数组成员时,它们使用$ arrayname [index]。因此,Perl $list[0]
就像bash ${list[0]}
一样,Perl @list
就像bash ${list[@]}
。
在Perl变量中使用my
关键字声明; bash中的等价物是declare
。
我已经使用system
函数来生成后台进程。它的参数可以只是命令行,因为你可以在bash中使用它。
与echo
不同,print
需要告知是否应该在该行的末尾添加换行符。对于最新版本的Perl,存在say
函数,它将为您附加换行符。
Perl sleep
函数非常明显。
编辑:由于print语句中的拼写错误$i
已被表示为$ni
,导致运行时错误。这已经得到纠正。