@Kle6800

Не работает условие по времени в bash скрипте?

не работает услове по времени в баш скрипте

структура таблицы 4f18deb2e7324b53a7b5d0870f70a7b1.PNG
#!/bin/sh
echo "Начинаем..."
#####забираю значения из баз данных
client=$(PGPASSWORD='postgres'   psql   -U postgres -d freeswitchdb -c "SELECT client FROM autodialer WHERE   status =  '1' LIMIT 1" | cat -n | awk '{print$2}' |  awk 'NR == 3')
start_time=$(PGPASSWORD='postgres'   psql   -U postgres -d freeswitchdb -c "SELECT interval_time_start FROM autodialer WHERE client = '$client' and status =  '1' " | cat -n | awk '{print$2}' |  awk 'NR == 3')
end_time=$(PGPASSWORD='postgres'   psql   -U postgres -d freeswitchdb -c "SELECT interval_time_end FROM autodialer WHERE client = '$client' and status =  '1' " | cat -n | awk '{print$2}' |  awk 'NR == 3')
current_time=$(date | cat -n | awk '{print$5}')

################вывожу значения
echo "Клиент...$client"
echo "Start time ... $start_time"
echo "End time ...$end_time"
echo "Current time ...$current_time"


if [ "$current_time"=>$start_time and "$current_time"=>end_time ]
then
    echo "попали под условие ..."
else
    echo " не попали под условие ..."

fi
  • Вопрос задан
  • 594 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Пользуйтесь timestamp, баш сравнивать даты не умеет.
Пользуйтесь declare -i, иначе все переменные по умолчанию в баше это строка, а не число.

опция --date позволяет указать какую дату вы хотите использовать
date --date="2011/12/12 12:12:12"
Monday, 12 december 2011 12:12:12 +0200

опция +%s позволяет при помощи date вывести нужную дату в виде "секунды с 1970 года", получите целые числа, которые может сравнить bash. Простой пример:

#!/bin/bash

declare -i MYDATE1=`date --date="2011/12/12 12:12:12" +%s`
declare -i MYDATE2=`date --date="2017/07/06 11:11:11" +%s`
declare -i CURRDATE=`date +%s`

echo $MYDATE1 $MYDATE2 $CURRDATE

if [ $MYDATE1 -lt $CURRDATE -a $MYDATE2 -gt $CURRDATE ]; then
  echo "Сейчас больше чем $MYDATE1 и меньше чем $MYDATE2"
else
  echo "не-а"
fi
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@immaculate
Программист-путешественник
Команда date умеет выдавать дату в нужном формате, не обязательно извращаться с cat и awk: date +%H:%M:%S. Сравнивать даты bash не умеет, можно конвертировать их в Unix epoch и сравнивать уже как числа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы