Рейтинг:-1

Как сравнить время в условии if?

флаг us
#!/бин/баш
tag=$(awk -F, 'NR==1{print $1}' /tmp/time.txt)# вывод: 17:00
sub_time=$(дата -d"${tag} +1:00" +'%H:%M') вывод: 16:00
current_time=$(date |awk 'NR==1{print $4}' вывод: 05:51:16
если [[ "$sub_time" -ge "$current_time" ]];тогда
   crontab <<EOF
   */15 * * * * bash server_shutdown.sh
EOF
фи

Я хочу сравнить «current_time» в текущей системе с тегом выключения VM из VM с «sub_time» через условие if.

pLumo avatar
флаг in
Что ты пытаешься сделать? Что такое подвремя? Почему 17:00+1 = 16:00? Почему вы используете awk для фильтрации вывода даты вместо использования строки формата даты? Что не работает (какие-то ошибки)? Очевидно, что `-ge` может сравнивать только целые числа ... но вы все равно должны добавить это к вопросу.
Рейтинг:1
флаг in

Было бы безопаснее преобразовать датировать строки в метки времени:

%s секунд с 1970-01-01 00:00:00 UTC

[[ $(дата +%s -d "$sub_time") -ge $(дата +%s -d "$current_time") ]]

Конечно, вы можете сделать это напрямую при создании переменных:

sub_time=$(дата -d"${tag} +1:00" +%s)
current_time=$(дата +%s)
если [[ $subtime -ge $current_time ]]; тогда
   ...
фи

  • Вместо того, чтобы создавать Текущее время самостоятельно, вы можете использовать переменную bash $EPOCHSECONDS (бить > 5.0).
  • Вы также можете использовать printf вместо датировать чтобы создать его: printf -v текущее_время '%(%s)T'

Имейте в виду, что эти параметры могут быть не очень портативными.

Haridvpsk avatar
флаг us
azureuser@puppetclient-ubuntu:~$ эхо $current_time "1632388663" azureuser@puppetclient-ubuntu:~$ эхо $sub_time 1632384000 еще условие выполняется, почему.?
Рейтинг:0
флаг li
#!/бин/баш
tag=$(awk -F, 'NR==1{print $1}' /tmp/time.txt)# вывод: 17:00
sub_time=$(date -d"${tag} +1:00" +'%H:%M')#выход: 16:00
current_time=$(date |awk 'NR==1{print substr($5,0,5)}')#output: 05:51
# в моей системе 5-е поле содержит время, а 4-е поле - год.
# поэтому я изменил это в awk
if [[ "$sub_time" > "$current_time" ]];then # сравнение выполняется лексикографически
   crontab <<EOF
   */15 * * * * bash server_shutdown.sh
EOF
фи
pLumo avatar
флаг in
Вместо того, чтобы фильтровать вывод `date` с помощью `awk`, почему бы просто не использовать `date +%H:%M`?
Haridvpsk avatar
флаг us
после того, как условие будет выполнено, моя работа cron не будет создана, почему?
Haridvpsk avatar
флаг us
Большое спасибо Mr.PLumo & Mahek, оба ответа работают для меня.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.