2

我正在研究 ksh 性能脚本。它采用以下选项: - i(间隔时间) - p(每个间隔的消息) - t(总消息)

例如:“script -i 1 -p 2 -t 10”表示每秒 2 条消息,最多 10 条。

这是有效的,但脚本尚未在给定的时间间隔内平均分布消息。在这个例子中,脚本应该在 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:$ 总计

-p:$PERINT

4

2 回答 2

1

根据serverfault question 340838 Aix 5.3 在 /usr/bin/ksh93 中附带了一个单独的 ksh93 二进制文件。

这将具有亚秒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 回答