NBash

Форк
0
/
L13-datecheck 
71 строка · 1.5 Кб
1
#!/bin/bash
2

3
normdate="./L9-normdate"
4

5
exceed_days_in_moth()
6
{
7
	case $(echo $1 | tr '[:upper:]' '[:lower:]') in
8
		jan*) days=31 ;; feb*) days=28 ;;
9
		mar*) days=31 ;; apr*) days=30 ;;
10
		may*) days=31 ;; jun*) days=30 ;;
11
		jul*) days=31 ;; aug*) days=31 ;;
12
		sep*) days=30 ;; oct*) days=31 ;;
13
		nov*) days=30 ;; dec*) days=31 ;;
14
		*) echo "$0: Неизвестное название месяца $1" >&2
15
		exit 1
16
	esac
17

18
	if [ $2 -lt 1 -o $2 -gt $days ]; then
19
		return 1
20
	else
21
		return 0 # Число месяца допустимо
22
	fi
23
}
24

25
is_leap_year()
26
{
27
	year=$1
28

29
	if [ "$((year % 4))" -ne 0 ]; then
30
		return 1
31
	elif [ "$((year % 400))" -eq 0 ]; then
32
		return 0
33
	elif [ "$((year % 100))" -eq 0 ]; then
34
		return 1
35
	else
36
		return 0
37
	fi
38
}
39

40
# Основной сценарий
41

42
if [ $# -ne 3 ]; then
43
	echo "Использование: $0 месяц день год" >&2
44
	echo "Допустимые форматы October 12 1973 или 10 12 1973"
45
	exit 1
46
fi
47

48
newdate="$($normdate "$@")"
49
if [ $? -eq 1 ]; then
50
	exit 1
51
fi
52

53
month="$(echo $newdate | cut -d\  -f1)"
54
day="$(echo $newdate | cut -d\  -f2)"
55
year="$(echo $newdate | cut -d\  -f3)"
56

57
if ! exceed_days_in_moth $month "$2"; then
58
	if [ "$month" = "Feb" -a "$2" -eq "29" ]; then
59
		if ! is_leap_year $3; then
60
			echo "$0: $3 не високосный год, поэтому в Феврале не может быть 29 дней" >&2
61
			exit 1
62
		fi
63
	else
64
		echo "$0: неверное значение дня даты, в $month нет $2 дней" >&2
65
		exit 1
66
	fi
67
fi
68

69
echo "Дата корректна: $newdate"
70

71
exit 0
72

73

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.