NBash
85 строк · 2.4 Кб
1#!/bin/bash
2
3reminderfile="$HOME/.reminderfile"
4
5is_day_name() {
6case $(echo "$1" | tr '[:upper:]' '[:lower:]') in
7mon*|tue*|wed*|thu*|fri*|sat*|sun*) return 0 ;;
8* ) return 1 ;;
9esac
10}
11
12is_month_name() {
13case $(echo "$1" | tr '[:upper:]' '[:lower:]') in
14jan*|feb*|mar*|apr*|may|jun*) return 0 ;;
15jul*|aug*|sep*|oct*|nov*|dec*) return 0 ;;
16* ) return 1 ;;
17esac
18}
19
20normalize() {
21result=$(echo -n "$1" | cut -c1 | tr '[:lower:]' '[:upper:]')
22result+=$(echo "$1" | cut -c2-3 | tr '[:upper:]' '[:lower:]')
23echo "$result"
24}
25
26if [ ! -w "$HOME" ] ; then
27echo "$0: Домашняя директория недоступна для записи ($HOME)" >&2
28exit 1
29fi
30
31echo "Reminder - утилита для напоминаний о событиях"
32echo -n "Дата события (day mon, day month year, dayname): "
33read -r var1 var2 var3
34
35if is_day_name "$var1" ; then
36if [ -n "$var2" ] ; then
37echo "Неверный ввод данных, введите только название дня недели" >&2
38exit 1;
39fi
40
41date="$(normalize "$var1")"
42
43else
44if [ -z "$var2" ] ; then
45echo "Невеный ввод данных, неизвестное название дня недели" >&2
46exit 1
47fi
48
49if [ -n "$(echo "$var1" | sed 's/[[:digit:]]//g')" ] ; then
50echo "Неверный ввод данных, введите сначала день с помощью цифр" >&2
51exit 1
52fi
53
54if [ "$var1" -lt 1 ] || [ "$var1" -gt 31 ] ; then
55echo "Неверный ввод данных, день месяца может быть только числом от 1 до 31" >&2
56exit 1
57fi
58
59if ! is_month_name "$var2" ; then
60echo "Неверный ввод данных, неизвестное название месяца" >&2
61exit 1
62fi
63
64var2="$(normalize "$var2")"
65
66if [ -z "$var3" ] ; then
67date="$var1$var2"
68else
69if [ -n "$(echo "$var3" | sed 's/[[:digit:]]//g')" ] ; then
70echo "Неверный ввод данных, третье поле должно быть годом" >&2
71exit 1
72elif [ "$var3" -lt 2023 ] || [ "$var3" -gt 2500 ] ; then
73echo "Неверный ввод данных, значение года должно быть не менее чем 2023 и не более чем 2500" >&2
74exit 1
75fi
76date="$var1$var2$var3"
77fi
78fi
79
80echo -n "Однострочное описание напоминания: "
81read -r description
82
83echo "$(echo "$date"|sed 's/ //g')|$description" >> "$reminderfile"
84
85exit 0