我试图写一个脚本,该脚本将打印在指定的年的所有月份$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
但是读取校准输出的第三行存在问题。在这些行中,天数通常不是从Mo地方开始的。如何可以解析CAL输出的第三行,因此号码$Mo,$Tu,$We,...总是正确的?
我需要POSIX标准友好解决方案。
慕妹3242003