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中的影子(或者是反过来).

posted @ 2025-05-19 11:10  dingxianghuan  阅读(22)  评论(0)    收藏  举报