"小于"的结果bash脚本中的运算符

时间:2015-09-03 12:56:32

标签: bash

我试图制作一个下载文件的脚本,如果它花费的时间少于' 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

2 个答案:

答案 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