如果页面加载时间超过6秒,则下面显示的shell脚本将显示警告。问题是myduration
变量不是整数。如何将其转换为整数?
myduration=$(curl http://192.168.50.1/mantisbt/view.php?id=1 -w %{time_total}) > /dev/null ; \
[[ $myduration -gt 1 ]] && echo "`date +'%y%m%d%H%M%S'
加载页面http://192.168.50.1/mantisbt/view.php?id=1
答案 0 :(得分:20)
假设$ myduration是十进制或整数
$ myduration=6.5
$ myduration=$( printf "%.0f" $myduration )
$ echo $myduration
6
答案 1 :(得分:2)
从变量中删除页面内容:
当我尝试你的命令时,myduration
包含我在测试中使用的URL加上时间值的页面的HTML内容。通过添加-s
来取消进度条并将-o /dev/null
添加到curl
的选项中,我可以将重定向移除到/dev/null
并且只保留myduration
的时间{1}}。
由于myduration
的值很可能很短,您可以使用 ire_and_curses
显示的技巧,这种技巧通常会产生零,因为结果会小于1您正在测试(请注意,您的日志消息显示为“6秒”)。
更精细的分辨率:
如果您希望进行更精细的分辨率测试,可以使用以下技术将myduration
乘以1000:
mult1000 () {
local floor=${1%.*}
[[ $floor = "0" ]] && floor=''
local frac='0000'
[[ $floor != $1 ]] && frac=${1#*.}$frac
echo ${floor}${frac:0:3}
}
编辑:此mult1000
版本正确处理“0.234”,“1”,“2。”,“3.5”等值
和“6.789”。对于小数位数超过三位的值,无论值是多少(“1.1119”变为“1.111”),都会截断多余的数字而不进行舍入。
您的脚本包含我上面提到的更改并使用mult1000
(使用我自己的示例时间):
myduration=$(curl -s -o /dev/null http://192.168.50.1/mantisbt/view.php?id=1 -w %{time_total}); [[ $(mult1000 $myduration) -gt 3500 ]] && echo "`date +'%y%m%d%H%M%S'` took more than 3.5 seconds to load the page http://192.168.50.1/mantisbt/view.php?id=1 " >> /home/shantanu/speed_report.txt
这里分为多行(和简化),使其在这个答案中更具可读性:
myduration=$(curl -s -o /dev/null http://example.com -w %{time_total})
[[ $(mult1000 $myduration) -gt 3500 ]] &&
echo "It took more than 3.5 seconds to load thttp://example.com" >> report.txt
答案 2 :(得分:1)
目前还不完全清楚,但我想你问的是如何将浮点值(myduration
)转换为bash
中的整数。这样的事情可能对你有帮助,这取决于你想要对你的数字进行整理的方式。
#!/bin/bash
floor_val=
ceil_val=
function floor() {
float_in=$1
floor_val=${float_in/.*}
}
function ceiling() {
float_in=$1
ceil_val=${float_in/.*}
ceil_val=$((ceil_val+1))
}
float_val=$1
echo Passed in: $float_val
floor $float_val
ceiling $float_val
echo Result of floor: $floor_val
echo Result of ceiling: $ceil_val
使用示例:
$ ./int.sh 12.345
Passed in: 12.345
Result of floor: 12
Result of ceiling: 13
答案 3 :(得分:1)
你可以这样做:
float=1.23
int=${float%.*}
我在bash上使用它。