TGDZ calc by Bash
Bash语言是很常用的Unix/Linux之类系统上命令行语言,历史悠久. 照猫画虎的写了一下简单的TGDZcalc,作为第28种语言实现.
包括三个函数,根据年份计算天干地支记年,根据天干地支和甲子元年来计算年份,以及根据年份计算当前年份对应的甲子元年.
在该文件所在的目录下运行脚本即可.
点击查看代码
#-----------脚本开始-----------
function YeartoTGDZ(){
tgArr=(甲 乙 丙 丁 戊 己 庚 辛 壬 癸)
dzArr=(子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥)
year=$1
declare -i offset=0
if test $year -ge 4
then
offset=4
else
offset=3
fi
year=`expr year−
offset`
t=`expr $year % 10`
d=`expr $year % 12`
echo tgArr[t]
{dzArr[d]}
}
function CalcBaseYear()
{
year=$1
declare -i bY
if test $year -ge 0
then
bY=1984
else
bY=-57
fi
while [ bY−gt
year ]
do
bY=`expr $bY-60`
done
tmp=`expr $bY - 60`
while [ bY−le
tmp ]
do
bY =`expr $bY + 60`
done
echo $bY
}
function TGDZtoYear()
{
TGDZ=$1
declare -i baseYear
baseYear=$2
charTG=${TGDZ:0:1} #注意这种子串的写法,起始位置+长度
charDZ=${TGDZ:1:1}
str1="甲乙丙丁戊己庚辛壬癸"
str2="子丑寅卯辰巳午未申酉戌亥"
ti=`expr index "str1""
charTG"`
ti=`expr $ti - 1` #调整为零基计数
di=`expr index "str2""
charDZ"`
di=`expr $di - 1`
m=`expr ti−
di`
if test $m -lt 0
then
m=`expr 12 + ti−
di`
fi
year=`expr baseYear+
ti + $m \* 5`
echo $year
}
#示例
echo "2025年的甲子元年是:"
CalcBaseYear 2025
echo "甲子元年1924年之后的丙辰年是:"
TGDZtoYear "丙辰" 1924
echo "2025年是农历哪年?"
YeartoTGDZ 2025
#在Windows Git Bash 环境下通过
#--------------脚本结束--------------

Bash初用的感觉,可以看出Powershell学习了它不少的做法,比如 逻辑运算的符号,表示数组元素的用法等; 数学计算的EXPR用法,又看到了cmake中的影子(或者是反过来).

浙公网安备 33010602011771号