Я энтузиаст bash.Я написал много сценариев, но на этот раз я думаю, что этот слишком велик для меня.Я работаю над сценарием, который проверяет количество часов на основе расписания из файла и суммирует их.
У меня есть файл с недельным расписанием.Используя grep, он возвращает мне расписание (например, 13:00 - 20:30 или 13:30 - 21:30).Эти файлы всегда будут в одном и том же формате, только часы будут другими, поэтому мой запрос grep всегда будет работать.Единственное отличие состоит в том, что иногда он возвращает четыре строки (с часами), иногда меньше, иногда больше, зависит от того, что находится в данном файле (я всегда могу использовать grep -c, если число этих строк имеет значение).
Когда я вычитаю время окончания из времени начала, результат будет правильным, хотя он не будет работать, если часы немного нечетны (например, 14:00 - 16:17).Как я могу достичь этого (2 часа и 17 минут)?
И тогда я думаю, что я должен использовать цикл.Я попробовал пару вещей, но запутался и решил приехать сюда.
Вот что у меня получилось (26to31 августа, очевидно, файл с расписанием).
#!/bin/bash
#COUNT=$(grep -c '[0-9][0-9]:[0-9][0-9]' 26to31August)
FINISH=$(grep '[0-9][0-9]:[0-9][0-9]' 26to31August |head -1 |awk '{ print $3 }')
START=$(grep '[0-9][0-9]:[0-9][0-9]' 26to31August |head -1 |awk '{ print $1 }')
VAR1=$(date -d "${FINISH}" +%s)
VAR2=$(date -d "${START}" +%s)
HOURS=$((VAR1-VAR2))
SECS2HOURS=$(expr $HOURS / 3600)
echo "That day it's $SECS2HOURS hours"
Я хочу, чтобы скрипт повторял каждую из этих строк, сообщая мне, сколько часов в каждой строке, а затем складывал их все вместе.
Должен ли я использовать цикл For?Должен ли я использовать функцию в цикле?
Буду признателен за ваши ответы.