2

私はkshパフォーマンススクリプトに取り組んでいます。次のオプションが必要です。--i(間隔時間)--p(間隔ごとのメッセージ)--t(合計メッセージ)

したがって、たとえば、「script -i 1 -p 2 -t 10」は、1秒あたり2メッセージから最大10までを意味します。

これは機能していますが、スクリプトはまだ指定された間隔でメッセージを均等に拡散していません。この例では、スクリプトは2番目のコマンドを0.5秒前ではなく0.5秒後に実行する必要があります。

これを簡単に行うことは可能ですか?

要するに、これは私がこれまでに持っているものです:

typeset -i i=0
typeset -i n=0

while [ $i -lt $TOTAAL ]; do
   while [ $n -lt $PERINT ]; do

      # execute this command

      n=$((n+1))
   done

   i=`expr $i + $PERINT`
   # Reset n
   n=0
   # Wait interval time
   sleep $INTERVAL
done

-i:$ INTERVALは整数(0、1、2 ...)であり、いかなる方法でも計算されません。スクリプトが予期しない入力を防ぐために、入力チェックを実行しました。

-t:$ TOTAAL

-p:$ PERINT

4

2 に答える 2

1

serverfault question 340838によると、Aix 5.3 は /usr/bin/ksh93 に別の ksh93 バイナリが同梱されています。

これには、1 秒未満sleepの浮動小数点演算が含まれます。間隔を計算するときは、フェンスとポストのエラーに注意してください。

于 2012-08-06T21:16:29.713 に答える
0

Henk Langeveldのおかげで、ksh93がプリインストールされていることがわかりました。これは新しいスクリプトです。うまくいくようです。

typeset -i i=0
typeset -i n=0

while [ $i -lt $TOTAAL ]; do
   while [ $n -lt $PERINT ]; do

      # execute this command

      sleep $VERDELING
      n=$((n+1))
   done

   i=$((i+PERINT))
   # Reset n
   n=0
done

これらは私が使用するチェックの一部です。エラーメッセージを翻訳しました。

if [[ $PERINT -gt $TOTAAL ]]; then
  echo "[[31mFOUT[0m] Messages per interval cannot be greater then total amount"; exit
fi

VERGELIJK=`echo "scale=1; $TOTAAL / $PERINT" | bc`
if [[ $VERGELIJK = *.[1-9]* ]]; then
  echo "[[31mFOUT[0m] Messages per interval has to be a multiple of the total amount"; exit
fi

VERDELING=`echo "scale=2; $INTERVAL / $PERINT" | bc`
于 2012-08-07T15:46:31.547 に答える