我有一个 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
内置功能,可用于休眠几分之一秒(厘秒)