NBash

Форк
0
/
L28-reminder-add 
85 строк · 2.4 Кб
1
#!/bin/bash
2

3
reminderfile="$HOME/.reminderfile"
4

5
is_day_name() {
6
	case $(echo "$1" | tr '[:upper:]' '[:lower:]') in
7
		mon*|tue*|wed*|thu*|fri*|sat*|sun*) return 0 ;;
8
		* ) return 1 ;;
9
	esac
10
}
11

12
is_month_name() {
13
	case $(echo "$1" | tr '[:upper:]' '[:lower:]') in
14
		jan*|feb*|mar*|apr*|may|jun*) return 0 ;;
15
		jul*|aug*|sep*|oct*|nov*|dec*) return 0 ;;
16
		* ) return 1 ;;
17
	esac
18
}
19

20
normalize() {
21
	result=$(echo -n "$1" | cut -c1 | tr '[:lower:]' '[:upper:]')
22
	result+=$(echo "$1" | cut -c2-3 | tr '[:upper:]' '[:lower:]')
23
	echo "$result"
24
}
25

26
if [ ! -w "$HOME" ] ; then
27
	echo "$0: Домашняя директория недоступна для записи ($HOME)" >&2
28
	exit 1
29
fi
30

31
echo "Reminder - утилита для напоминаний о событиях"
32
echo -n "Дата события (day mon, day month year, dayname): "
33
read -r var1 var2 var3
34

35
if is_day_name "$var1" ; then
36
	if [ -n "$var2" ] ; then
37
		echo "Неверный ввод данных, введите только название дня недели" >&2
38
		exit 1;
39
	fi
40

41
	date="$(normalize "$var1")"
42

43
else
44
	if [ -z "$var2" ] ; then
45
		echo "Невеный ввод данных, неизвестное название дня недели" >&2
46
		exit 1
47
	fi
48

49
	if [ -n "$(echo "$var1" | sed 's/[[:digit:]]//g')" ] ; then
50
		echo "Неверный ввод данных, введите сначала день с помощью цифр" >&2
51
		exit 1
52
	fi
53

54
	if [ "$var1" -lt 1 ] || [ "$var1" -gt 31 ] ; then
55
		echo "Неверный ввод данных, день месяца может быть только числом от 1 до 31" >&2
56
		exit 1
57
	fi
58

59
	if ! is_month_name "$var2" ; then
60
		echo "Неверный ввод данных, неизвестное название месяца" >&2
61
		exit 1
62
	fi
63

64
	var2="$(normalize "$var2")"
65

66
	if [ -z "$var3" ] ; then
67
		date="$var1$var2"
68
	else
69
		if [ -n "$(echo "$var3" | sed 's/[[:digit:]]//g')" ] ; then
70
			echo "Неверный ввод данных, третье поле должно быть годом" >&2
71
			exit 1
72
		elif [ "$var3" -lt 2023 ] || [ "$var3" -gt 2500 ] ; then
73
			echo "Неверный ввод данных, значение года должно быть не менее чем 2023 и не более чем 2500" >&2
74
			exit 1
75
		fi
76
		date="$var1$var2$var3"
77
	fi
78
fi
79

80
echo -n "Однострочное описание напоминания: "
81
read -r description
82

83
echo "$(echo "$date"|sed 's/ //g')|$description" >> "$reminderfile"
84

85
exit 0

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

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

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

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