LINUX.ORG.RU

Вопрос по условию в bash


0

1

Подскажите, плс, правильно ли реализовано следующее условие: если (времени >=18 и <=23) или (времени >=0 и <=08) Смысл в том что временной интервал находится в диапазоне от 18 до 08 часов. Может быть можно как-то красивее и грамотнее? Вроде и так работает, но всё-же...

#!/bin/bash if [ `date +%H` -ge «18» -a `date +%H` -le «23» -o `date +%H` -ge «00» -a `date +%H` -le «08» ]; then #операторы fi

Навеяно рассуждениями на тему: http://forum.ubuntu.ru/index.php?topic=92123.msg1169154#msg1169154

Всем спасибо.


Что-то вроде:

* 18-08 * * * /path/имя_файла_с_требуемыми_операторами

в crontab.

Такое подходит?

OldFatMan
()

Проверки >=18 и <=08 вполне хватит. Больше, чем 24 часа в сутки всё равно быть не может.

%H возвращает час с предшествующим нулём, который башем интерпретируется как начало oct-числа. %k - то, что нужно.

#!/bin/bash
H=$(date +%k)
if [ "$H" -ge "18" -o "$H" -le "8" ]; then
    #операторы
fi
schizoid ★★★
()

Подскажите, плс, правильно ли реализовано следующее условие: если (времени >=18 и <=23) или (времени >=0 и <=08) Смысл в том что временной интервал находится в диапазоне от 18 до 08 часов. Может быть можно как-то красивее и грамотнее? Вроде и так работает, но всё-же...

if (( $TIME >= 18 || $TIME <= 8 )); then
  ...
fi
drBatty ★★
()
Ответ на: комментарий от schizoid

Ради интереса проверил, как интерпретируются oct-числа в проверках-сравнениях.

 
$ if [ "012" -eq "10" ]; then echo "Yes"; fi 
$ if [ "010" -eq "10" ]; then echo "Yes"; fi 
Yes 
$ 

Но это не влияет на правильность твоего решения.

OldFatMan
()
Ответ на: комментарий от OldFatMan

У ТС число 08 участвует в проверке; его не существует в восьмеричной системе.

~$ H=08
~$ [[ "$H" -lt 9 ]] && echo less than
bash: [[: 08: value too great for base (error token is "08")
schizoid ★★★
()
Ответ на: комментарий от schizoid
$ if [ "08" -eq "8" ]; then echo "Yes"; fi
Yes
$

Ах, да - ты же уже хитро заменил [ на [[. Ну да - с двумя брэкетами выдаёт ошибку.

OldFatMan
()
Ответ на: комментарий от OldFatMan

К сожалению, условия не позволяют. Событие вызывает движение зафиксированное камерой и время проверяется при каждом запуске.

salt
() автор топика
now=`date -R`
start=`date -d "($now) 23" +%s`
finish=`date -d "($now) 08" +%s`
now=`date -d "($now)" +%s`
if [ $finish -le $now -a $start -ge $now ] ; then
  echo "between 08 - 23"
else
  echo "between 23 - 08 (00:00-07:59 23:00-23:59)"
fi
MKuznetsov ★★★★★
()
Ответ на: комментарий от AGUtilities

Питон мне пока чужд, думаю переписать это чудо на перле...

salt
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.