KSH:随着时间推移传播命令

时间:2012-08-06 18:18:05

标签: performance shell unix ksh

我正在开发一个ksh性能脚本。它需要以下选项: - 我(间隔时间) - 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:$ TOTAAL

-p:$ PERINT

2 个答案:

答案 0 :(得分:1)

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

这将具有亚秒sleep和浮点运算。在计算间隔时,请注意fence-post错误。

答案 1 :(得分: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`