Я в основном кш, но мой опыт работы с bash говорит, что это должно сработать (учитывая ваш пример) или, по крайней мере, указать вам, что нужно сделать.
hrVal=6
case ${hrVal} in
1|[5-7]|16 ) print -- "true" ;;
* ) print -- "false" ;;
esac
Изменить 2018-08-20 Для bash
вам нужно изменить print --
на echo ....
или printf "%s\n"
.
На самом деле, я бы удалил материал print -- ""
и просто вызовите exit 0
или exit 1
, который затем завершится с соответствующим кодом возврата, который затем можно будет проверить вызывающим процессом.
, чтобы включить остальную часть вашего примера, япришлось сделать
hrVal=6
eval "
case ${hrVal} in
1|[5-7]|16|$(( ${hrVal} / 3 )) ) print -- "true" ;;
* ) print -- "false" ;;
esac
"
Итак, это может быть захватывающе!
- Разобрать каждый из 5 временных диапазонов, как указано выше
- применить команды sed like для преобразования записейкак 1,5-7,16 в 1 | [5-7] | 16
- перехватывать и конвертировать ваши математические выражения в вычислимые выражения (о, вы, вероятно, можете получить результат перед оператором case и просто объединитьзначение в ....) сохраните все производные значения как переменные,
- используйте эти переменные в качестве целевых значений, возможноe оборачивая все это и избегая символов по мере необходимости с помощью eval.
- оценивает объединенную правду всех возвращаемых значений 5 столбцов (любое ложное == ложное)
(возможно, это(($ {hrVal} / 3)) в bash)
IHTH