····hour=$(echo "$hour" | tr '*' 'X')··# Часы
····dom=$(echo "$dom" | tr '*' 'X')····# День месяца
····mon=$(echo "$mon" | tr '*' 'X')····# Месяц
····dow=$(echo "$dow" | tr '*' 'X')····# День недели
··}
··if [$# −ne 1] || [! -r $1]; then
····# Если имя файла crontab не задано или если он недоступен сценарию
····#·· для чтения, завершить работу с выводом сообщения.
····echo "Usage: $0 usercrontabfile" >&2
····exit 1
··fi
··lines=0·· entries=0·· totalerrors=0
··# Выполнить обход строк в файле crontab и проверить каждую в отдельности.
··while read min hour dom mon dow command
··do
····lines="$(($lines + 1))"
····errors=0
····if [-z "$min" −o "${min%${min#?}}" = "#"]; then
······# Если это пустая строка или начинается с символа "#", пропустить ее.
······continue··# Ничего проверять не надо
····fi
····((entries++))
····fixvars
····# В этой точке все поля в текущей строке перенесены в отдельные
····#·· переменные, все звездочки заменены символом "X" для удобства,
····#·· поэтому можно приступать к проверке полей…
····# Проверка минут
······if! validNum $minslice 60; then
········echo "Line ${lines}: Invalid minute value \"$minslice\""
········errors=1
······fi
····done
····# Проверка часов
······if! validNum $hrslice 24; then
········echo "Line ${lines}: Invalid hour value \"$hrslice\""
········errors=1
······fi
····done
····# Проверка дня месяца
······if! validNum $domslice 31; then
········echo "Line ${lines}: Invalid day of month value \"$domslice\""
········errors=1
······fi
····done
····# Проверка месяца: нужно проверить числовые значения и названия.
····#·· Запомните, что условные инструкции вида "if! cond" проверяют
····#·· ЛОЖНОСТЬ утверждения, а не истинность.
······if! validNum $monslice 12; then
········if! validMon "$monslice"; then
··········echo "Line ${lines}: Invalid month value \"$monslice\""
··········errors=1
········fi
······fi
····done
····# Проверка дня недели: так же может быть числом или названием.
······if! validNum $dowslice 7; then
········if! validDay $dowslice; then
··········echo "Line ${lines}: Invalid day of week value \"$dowslice\""
··········errors=1
········fi
······fi
····done
····if [$errors −gt 0]; then
······echo ">>>> ${lines}: $sourceline"
······echo ""
······totalerrors="$(($totalerrors + 1))"
····fi