2016-12-09 6 views
-1

У меня есть переменная с фактическим временем.Shell Scripting: Check Time with case Statement

time=$(date +"%H:%M") 

Теперь я хочу проверить (с заявлением случая), к которому он принадлежит.

Диапазон: 06:00 to 12:00, 13:00 to 18:00, 19:00 to 22:00 и 23:00 to 05:00.

Как я могу определить, в каком из этих диапазонов - мое фактическое время?

+0

case $ time in pattern Я не знаю, что я должен использовать в качестве шаблона, чтобы получить результат – TheRealMagic

+0

уверен, но я не могу найти решение, поэтому мне нечего делать дальше – TheRealMagic

ответ

0

Работа над этим замечательным Stéphane Chazelas's answer для выполнения арифметики на case-construct и моей собственной логики для обработки значений даты с использованием GNU date, сценарий, подобный приведенному ниже, должен решить вашу проблему.

#!/bin/bash 

read -p "Date in (HH:MM) format: " inputdate 

numDate=$(date -d"$inputdate" +"%H%M") 

case $((
    (numDate >= 0600 && numDate <= 1200) * 1 + 
    (numDate >= 1300 && numDate <= 1800) * 2 + 
    (numDate >= 1900 && numDate <= 2200) * 3 + 
    (numDate >= 2300 && numDate <= 0500) * 4)) in 
    (1) echo "In time range between 06:00 to 12:00";; 
    (2) echo "In time range between 13:00 to 18:00";; 
    (3) echo "In time range between 19:00 to 22:00";; 
    (4) echo "In time range between 23:00 to 05:00";; 
    (0) echo "None of the above";; 
esac 

Логика разбора даты ввода в только реальные цифры с GNU date's опции +"%H%M" и работать на возвращаемые значения оценки.