bash x 分钟的重复功能

bash x 分钟的重复功能

我有一个 bash 脚本,其中包含一个名为speedtest创建的函数,如下所示:

function speedtest
    {
            echo $time_min; 
            echo $(date +%R),"$(speedtest-cli --csv)" >>temp.csv # Outputs van datum en speedtest in temp.csv
            cut -d, -f1,8 < temp.csv >> output2.csv; # Verwijderd onnodige info uit temp en plaatst het in output.csv
            awk -F , -v OFS=, '$3/=1000000' <output2 >output2.csv # Zet bits/s om naar Mbp/s
            rm temp.csv;
    }

我想每 x 分钟运行一次这个函数。

答案1

function speedtest {是 ksh 函数定义语法。您不妨在这里使用 ksh93,它$SECONDS可以设为浮点,并且具有sleep亚秒级精度的内置命令:

min=60
((every = 5 * min))
typeset -F SECONDS=0
t=0
while true; do
  speedtest
  sleep "$(( (t += every) - SECONDS))"
done

ksh93还具有内置时间戳和 CSV 解析/生成,因此您的速度测试函数可以写为:

function speedtest
{
  typeset -a fields
  echo "$time_min"
  speedtest-cli --csv | IFS=, read -rSA fields
  ((fields[1] /= 1e6))
  {
    printf '%(%R)T'
    printf ',%#q' "${fields[@]:0:7}"
    printf '\n'
  } > output.csv
}

zsh$SECONDS可以设为浮点,但不是内置的,因此在不支持亚秒睡眠sleep的系统上同样不起作用。sleep它确实有一个zselect内置功能,可用于休眠几分之一秒(厘秒)

相关内容