0

これがbashのループです:

  while [$#-ge 1]; 行う
    ケース$1
    -a)
      シフト
      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
    シフト
  終わり

引数がコマンドラインの値を入力するように、これをperlで変換するにはどうすればよいですか?

php loadAgent_curl.php $ NUM_AGENTS $ HOST_NAME $ procStartTime $ i $ TARGET_PAGE $ reqlogfile $ resplogfile $ USER_NAME $ USER_PASS $ execDelay $ COMMON_SID&

-------質問に追加:

これは確かに役立ちます、そして私は本当に感謝しています、getOptionsの外でこれらのパラメータにアクセスする方法はありますか?これがbashスクリプトの残りの部分です:

私の$i= "0";
私の$startTime= date +%s;
startTime = $ [$ startTime + $ NUM_AGENTS + 10]
私の$PWD= pwd;
私の$logdir= "\ $ PWD / load-logs";
system(mkdir $ logdir / $ startTime);
私の$reqlogfile= "$ logdir / $ startTime / req.log";
私の$resplogfile= "$ logdir / $ startTime / resp.log";

印刷"\n"; 印刷"##################\ n"; 印刷"起動要求\n"; 印刷"ホスト名:\ $ HOST_NAME \ n"; print "TARGET PAGE:\ $ TARGET_PAGE \ n"; print "#エージェント:\ $ NUM_AGENTS \ n"; print "EXECUTION TIME:\ $ startTime(0〜 \ $ TIME_STAGGER秒の間でランダムにずらして)\ n"; print "REQ LOG FILE:$ reqlogfile \ n"; print "RESP LOG FILE:$ resplogfile \ n"; 印刷"##################\ n"; 印刷"\n"; # # highestStart = $ startTime

$ startTime + = $ ARGV [0] + 5; 私の$dTime= localtime($ startTime); 印刷"\n ##################\n起動リクエスト\n カウント:$ ARGV [0] \ n 遅延:| 1 \ n スクリプトは次の場所で起動します:$ 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"; 睡眠1; }

# # while [$ NUM_AGENTS -gt "$ i"] 行う i = $ [$ i + 1] execDelay = $((RANDOM%$ TIME_STAGGER))"。"$((RANDOM%100)) procStartTime = $ [$ startTime] procStartTime = $ [$ startTime + $ execDelay] if [$ procStartTime -gt $highestStart] それから highestStart = $ procStartTime fi echo "ステータス:$execDelay秒の遅延でリクエスト$iをキューに入れます"

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 終わり

echo "ステータス:キューに入れられたリクエストの準備が整うのを待っています" while [ date +%s-lt $ startTime] 行う 睡眠1 終わり # echo "ステータス:最後のリクエストが発行されるのを待っています" while [ date +%s-lt $ highestStart] 行う 睡眠1 終わり # echo "ステータス:最後に発行された応答" # echo "ステータス:応答ログファイルが作成されるのを待っています" その間 [ !-e "$ resplogfile"] 行う 睡眠1 終わり # while [ wc -l "$resplogfile"| awk '{print $1'}-lt $ NUM_AGENTS] 行う #echo "(wc -l "$resplogfile"| awk '{print $1'}記録された$ NUM_AGENTS応答の)" 睡眠1 終わり エコー「ステータス:終了」

真実である間; 行う read -p "リクエストログを表示しますか?[y / n]" yn ケース$yn [Yy] *)cat $ reqlogfile; 壊す;; [Nn] *)終了;; *)echo"はいまたはいいえで答えてください。";; esac 終わり

真実である間; 行う read -p "応答ログを表示しますか?[y / n]" yn ケース$yn [Yy] *)cat $ resplogfile; 壊す;; [Nn] *)終了;; *)echo"はいまたはいいえで答えてください。";; esac 終わり

4

1 に答える 1

2

Getopt::Longライブラリは、コマンドラインオプションを処理するための標準的なPerlの方法です。

このようなものが機能します。テストされていません-エンプターに注意してください!

PHPパラメータはコマンドラインオプションといくつかの未確認の変数が混在しているため、最初の例では、可能なすべてのオプションを%argsハッシュに格納するように設計しました(たとえば、プログラムでは$args{procStartTime}代わりにを使用する必要があります$procStartTime)。これにより、非常に短く一般的なものにすることができました。これが読みにくい/理解しにくい場合は、より簡単ですが一般的ではない2番目の例もあります

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}, "&"));

2番目の、それほど高度ではないがより直接的なオプションは次のとおりです。

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} &");
于 2010-12-28T17:20:45.633 に答える