Группируйте различные условия внутри одного IF в скрипте bash - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь сгруппировать эти условия, но он возвращает:

awaited conditional binary operator
waiting for `)'
syntax error next to `$thetime'
`  ( dateutils.dtest $thetime --gt '09:30:00' && dateutils.dtest $thetime --lt '11:00:00' ) ||'

Я уже пытаюсь как:

https://unix.stackexchange.com/questions/290146/multiple-logical-operators-a-b-c-and-syntax-error-near-unexpected-t

Группы составныхусловия в тесте Bash

#!/bin/bash

thetime=$(date +%H:%M:%S)

if [[
  ( dateutils.dtest $thetime --gt '09:30:00' && dateutils.dtest $thetime --lt '11:00:00' ) ||
  ( dateutils.dtest $thetime --gt '13:00:00' && dateutils.dtest $thetime --lt '17:00:00' )
]]; then
  iptables -A OUTPUT -d 31.13.85.36 -j REJECT
else
  iptables -A OUTPUT -d 31.13.85.36 -j ACCEPT
fi

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Вы можете к следующему:

#!/bin/bash

thetime=$(date +%H:%M:%S)

if ( $(dateutils.dtest $thetime --gt '09:30:00') && $(dateutils.dtest $thetime --lt '11:00:00') ) || ( $( dateutils.dtest $thetime --gt '13:00:00' ) && $( dateutils.dtest $thetime --lt '17:00:00' ) ); then
  iptables -A OUTPUT -d 31.13.85.36 -j REJECT
else
  iptables -A OUTPUT -d 31.13.85.36 -j ACCEPT
fi
0 голосов
/ 25 февраля 2019

Предполагая, что dateutils.dtest - это просто обычный исполняемый файл, который использует свои аргументы для выполнения какого-либо сравнения, вам нужно что-то вроде

if { dateutils.dtest $thetime --gt '09:30:00' &&
     dateutils.dtest $thetime --lt '11:00:00'; } ||
   { dateutils.dtest $thetime --gt '13:00:00' &&
     dateutils.dtest $thetime --lt '17:00:00'; }; then
  iptables -A OUTPUT -d 31.13.85.36 -j REJECT
else
  iptables -A OUTPUT -d 31.13.85.36 -j ACCEPT
fi

Это предполагает, например, что dateutils.dtest имеет статус выхода0, если $thetime после 9:30:00, и ненулевой статус выхода в противном случае.

Фигурные скобки ({ ... }) действуют как операторы группировки, поскольку && и || имеют равныеприоритет в оболочке;обратите внимание на точку с запятой перед каждым закрытием }.

0 голосов
/ 25 февраля 2019

Я бы потерял двоеточия (:) и сделал бы следующее сравнение:

thetime=$(date +%H%M%S)

if [ "$thetime" -gt "093000" ] && [ "$thetime" -lt "110000" ] || [ "$thetime" -gt "130000" ] && [ "$thetime" -lt "170000" ]; then
  iptables -A OUTPUT -d 31.13.85.36 -j REJECT
else
  iptables -A OUTPUT -d 31.13.85.36 -j ACCEPT
fi
...