我试图制作一个下载文件的脚本,如果它花费的时间少于' x'几秒钟,它是一个通行证,但由于某种原因我无法正常工作,我已经尝试了'< =' ' -lt'在下面的示例中,它总是“快速”。我快2.09
#!/bin/bash
file=&(time -p wget -O /dev/null -q http://site/file.iso ) 2>&1 | grep real | sed -e s/real//g -e s/' '//g
if [ $file <= 1 ]
then
echo "FAST"
else
echo "SLOW"
fi
答案 0 :(得分:2)
bash内置time
直接输出到您的终端,而不是stdio频道。
您需要使用使用stderr的/bin/time
:
$ time -p sleep 1 >/dev/null 2>&1
real 1.00
user 0.00
sys 0.00
$ /bin/time -p sleep 1
real 1.00
user 0.00
sys 0.00
$ /bin/time -p sleep 1 2>/dev/null
$
所以:
$ command time -p sleep 1 2>&1 | awk -v limit=0.5 '$1 == "real" {exit ($2 <= limit)}'
$ echo $?
0
$ command time -p sleep 1 2>&1 | awk -v limit=1.5 '$1 == "real" {exit ($2 <= limit)}'
$ echo $?
1
然后
limit=1 # 1 second
if command time -p wget -O /dev/null -q http://site/file.iso |
awk -v lmt=$limit '$1 == "real" {exit ($2 <= lmt)}'
then
echo "FAST"
else
echo "SLOW"
fi
答案 1 :(得分:1)
要捕获time
的输出,您需要大括号:
file=$( { time -p wget -O /dev/null -q http://site/file.iso ; } 2>&1 | grep real | sed -e s/real//g -e s/' '//g )
Bash无法进行浮点计算,因此您可以使用bc
:
[[ $( echo $file' <= 1.0' | bc ) == 1 ]] && echo FAST || echo SLOW