Я пытаюсь написать скрипт, который будет печатать все месяцы в указанном году $3
, у которых день в $1
(например, Мо, Ту, ...) совпадает с датой $2
(1,2,3, ...).
Пример: ввод: ./task1.sh Tu 5 2006
вывод:
September 2006
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
December 2006
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Я написал этот сценарий:
#!/bin/sh
year=$3
dayInMonth=$2
dayInWeek=$1
index=1
while expr $index '!=' 13 >/dev/null; do
cal -m $index $year| tail -n +2| while read Mo Tu We Th Fr Sa Su ; do
eval theDay='$'$dayInWeek
if [ "$theDay" = "$dayInMonth" ]; then
cal -m $index $year;
fi
done
index=$(expr $index + 1)
done
Но есть проблема с чтением третьей строки вывода калибровки.В этих строках число дней обычно не начинается с места Мо.Как я могу проанализировать третью строку вывода cal, чтобы числа в $Mo
, $Tu
, $We
, ... всегда были правильными?
Мне нужно стандартное дружественное решение POSIX.