Ответ 1
Предполагая, что $myduration является десятичным или целым числом
$ myduration=6.5
$ myduration=$( printf "%.0f" $myduration )
$ echo $myduration
6
В приведенном ниже списке команд появится предупреждение, если на страницу загружено более 6 секунд.
Проблема в том, что переменная 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'` took more than 6 seconds to load the page http://192.168.50.1/mantisbt/view.php?id=1 " >> /home/shantanu/speed_report.txt
Предполагая, что $myduration является десятичным или целым числом
$ myduration=6.5
$ myduration=$( printf "%.0f" $myduration )
$ echo $myduration
6
Устранить содержимое страницы из переменной:
Когда я попробовал вашу команду, myduration
содержал содержимое HTML страницы по URL-адресу, который я использовал в своем тесте, плюс значение времени. Добавив -s
для подавления индикатора выполнения и добавления -o /dev/null
к параметрам curl
, я смог удалить перенаправление на /dev/null
и иметь только время, сохраненное в myduration
.
Так как значение 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" ).
Ваш script с изменениями, упомянутыми выше, и использованием 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
Это не совсем понятно, но я думаю, вы спрашиваете, как преобразовать значение с плавающей запятой (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
Вы можете сделать это:
float=1.23
int=${float%.*}
Я использую это на bash.