您的位置:首页 > 运维架构 > Shell

linux shell之易经起卦

2014-01-11 19:24 344 查看
#!/bin/bash
#《周易》是一部中国古哲学书籍,亦称易经,简称易。易的主要意思是变化,
#周易以高度抽象的六十四卦的形式表征普遍存在的双边关系中可能发生的各种
#各样的变化,本脚本写的是易经的起卦方式。
#首先获取6个随机数字,判断他们的奇偶,奇为--,偶为-,组成一卦,按照天,泽,
#火,雷,风,水,山,地,排列数取得变爻,改变之前生成的文件内容,形成新卦,最终引出经文。

for a in 1 2 3 4 5 6
do
#echo "$a">/dev/null
#循环输出1到6,每输出一次执行一次下面的语句。
case $a in
1)
i=$(( $RANDOM % 384 ))
j=$(( $i%2 ))
#输出为1时 获取0到384内的随机数,并判断这个随机数的奇偶
case $j in
0)
echo " __ " >>./qg/yj.txt
echo 九 >>./qg/yao.txt
echo "0" >>./qg/5.txt
#如果为偶数执行上面的语句,把这些字输入到指定文件内
;;
1)
echo " -- " >>./qg/yj.txt
echo 六 >>./qg/yao.txt
echo "1" >>./qg/5.txt
esac
echo 初 >>./qg/y.txt
#如果为奇数,则执行上面的命令。
;;
2)
i=$(( $RANDOM % 384 ))
j=$(( $i%2 ))

case $j in
0)
echo " __ " >>./qg/yj.txt
echo 九 >>./qg/y.txt
echo "0" >>./qg/5.txt
;;
1)
echo " -- " >>./qg/yj.txt
echo 六 >>./qg/y.txt
echo "1" >>./qg/5.txt
esac
echo 二 >>./qg/yao.txt
;;
3)
i=$(( $RANDOM % 384 ))
j=$(( $i%2 ))

case $j in
0)
echo " __ " >>./qg/yj.txt
echo 九 >>./qg/y.txt
echo "0" >>./qg/5.txt
;;
1)
echo " -- " >>./qg/yj.txt
echo 六 >>./qg/y.txt
echo "1" >>./qg/5.txt
esac
echo 三 >>./qg/yao.txt
;;
4)
i=$(( $RANDOM % 384 ))
j=$(( $i%2 ))

case $j in
0)
echo " __ " >>./qg/yj.txt
echo 九 >>./qg/y.txt
echo "0" >>./qg/5.txt
;;
1)
echo " -- " >>./qg/yj.txt
echo 六 >>./qg/y.txt
echo "1" >>./qg/5.txt
esac
echo 四 >>./qg/yao.txt
;;
5)
i=$(( $RANDOM % 384 ))
j=$(( $i%2 ))

case $j in
0)
echo " __ " >>./qg/yj.txt
echo 九 >>./qg/y.txt
echo "0" >>./qg/5.txt
;;
1)
echo " -- " >>./qg/yj.txt
echo 六 >>./qg/y.txt
echo "1" >>./qg/5.txt
esac
echo 五 >>./qg/yao.txt
;;
6)
i=$(( $RANDOM % 384 ))
j=$(( $i%2 ))

case $j in
0)
echo " __ " >>./qg/yj.txt
echo 九 >>./qg/yao.txt
echo "0" >>./qg/5.txt
;;
1)
echo " -- " >>./qg/yj.txt
echo 六 >>./qg/yao.txt
echo "1" >>./qg/5.txt
esac
echo 上 >>./qg/y.txt
echo " " >>./qg/5.txt

esac
done
#到此循环完毕,下面是对取得的文件进行编辑,以符合易经原理
tac ./qg/yao.txt >>./qg/1.txt
#把此文件内容反序输出到1.txt
tac ./qg/yj.txt >>./qg/2.txt
#把此文件内容反序输出到2.txt
tac ./qg/y.txt >>./qg/3.txt
#同上
paste ./qg/3.txt ./qg/1.txt ./qg/2.txt >>./qg/4.txt
#把上面三个文件合并输出到4.txt
cat ./qg/4.txt|awk '{print $1,$2,$3}'
#缩小4文件中文字间隔
tac ./qg/5.txt >./qg/55.txt
#把5文件反向输出到55中
cat ./qg/55.txt|awk '{if(NR>1) printf $1 }'>>./qg/6.txt
#把55文件中的坚排列转换成横排列输出到6文件中
sg=$(cat ./qg/6.txt|awk '{print $1}'|cut -c 1-3)
xg=$(cat ./qg/6.txt|awk '{print $1}'|cut -c 4-6)
#取得6文件中的数字的前三位和后三位,在下面语句中用来判断卦名
#sg=上卦 xg=下卦
case $sg in
000)
aa="上乾"
c=1
;;
111)
aa="上坤"
c=8
;;
110)
aa="上震"
c=4
;;
001)
aa="上巽"
c=5
;;
101)
aa="上坎"
c=6
;;
010)
aa="上离"
c=3
;;
011)
aa="上艮"
c=7
;;
100)
aa="上兑"
c=2
esac

case $xg in
000)
bb="下乾"
d=1
;;
111)
bb="下坤"
d=8
;;
110)
bb="下震"
d=4
;;
001)
bb="下巽"
d=5
;;
101)
bb="下坎"
d=6
;;
010)
bb="下离"
d=3
;;
011)
bb="下艮"
d=7
;;
100)
bb="下兑"
d=2
esac
echo $aa
echo $bb
#输出取得的卦名(叫法可能不准)
echo "------------变卦后-------------------------------"
#下面是计算变爻数,取得数字后除6取余,余数为变爻位,取反。
ll=$(date +%H)
case $ll in
23|0 )
h=1
;;
1|2 )
h=2
;;
3|4 )
h=3
;;
5|6 )
h=4
;;
7|8 )
h=5
;;
9|10 )
h=6
;;
11|12 )
h=7
;;
13|14 )
h=8
;;
15|16 )
h=9
;;
17|18 )
h=10
;;
19|20 )
h=11
;;
21|22 )
h=12
esac
#取得当前时间参数
bianyao=$(( $(( $h+$c$d ))%6 ))
#用卦号和当前时间计算出变爻数,并改变之前生成的55文件中对应的的爻符(取反)。
case $bianyao in
1)
ab=$(sed -n '7p'<./qg/55.txt)
#如果取得的变爻为1,提取出第一爻数字
case $ab in
0)
cat ./qg/55.txt|sed '7a 1'|sed '7d'>./qg/7.txt
#如果第一爻为0,则把第7行后加一行并写入 1 再把原第7行删除,相当于把第7 行的0换成1.
;;
1)
cat ./qg/55.txt|sed '7a 0'|sed '7d'>./qg/7.txt
#同上,相反是把1 换成0 。
esac
;;
2)
ab=$(sed -n '6p'<./qg/55.txt)
case $ab in
0)
cat ./qg/55.txt|sed '6a 1'|sed '6d'>./qg/7.txt
;;
1)
cat ./qg/55.txt|sed '6a 0'|sed '6d'>./qg/7.txt
esac
;;
3)
ab=$(sed -n '5p'<./qg/55.txt)
case $ab in
0)
cat ./qg/55.txt|sed '5a 1'|sed '5d'>./qg/7.txt
;;
1)
cat ./qg/55.txt|sed '5a 0'|sed '5d'>./qg/7.txt
esac
;;
4)
ab=$(sed -n '4p'<./qg/55.txt)
case $ab in
0)
cat ./qg/55.txt|sed '4a 1'|sed '4d'>./qg/7.txt
;;
1)
cat ./qg/55.txt|sed '4a 0'|sed '4d'>./qg/7.txt
esac
;;
5)
ab=$(sed -n '3p'<./qg/55.txt)
case $ab in
0)
cat ./qg/55.txt|sed '3a 1'|sed '3d'>./qg/7.txt
;;
1)
cat ./qg/55.txt|sed '3a 0'|sed '3d'>./qg/7.txt
esac
;;
0)
ab=$(sed -n '2p'<./qg/55.txt)
case $ab in
0)
cat ./qg/55.txt|sed '2a 1'|sed '2d'>./qg/7.txt
;;
1)
cat ./qg/55.txt|sed '2a 0'|sed '2d'>./qg/7.txt
esac

esac
cat ./qg/7.txt|awk '{if(NR>1) printf $1}' >>./qg/8.txt
bsg=$(cat ./qg/8.txt|awk '{print $1}'|cut -c 1-3)
bxg=$(cat ./qg/8.txt|awk '{print $1}'|cut -c 4-6)

#变爻后获取新的卦符
case $bsg in
000)
aaa="上乾"
ca=1
;;
111)
aaa="上坤"
ca=8
;;
110)
aaa="上震"
ca=4
;;
001)
aaa="上巽"
ca=5
;;
101)
aaa="上坎"
ca=6
;;
010)
aaa="上离"
ca=3
;;
011)
aaa="上艮"
ca=7
;;
100)
aaa="上兑"
ca=2
esac

case $bxg in
000)
bbb="下乾"
db=1
;;
111)
bbb="下坤"
db=8
;;
110)
bbb="下震"
db=4
;;
001)
bbb="下巽"
db=5
;;
101)
bbb="下坎"
db=6
;;
010)
bbb="下离"
db=3
;;
011)
bbb="下艮"
db=7
;;
100)
bbb="下兑"
db=2
esac

echo $aaa
echo $bbb
#输出新的卦名
#
case $db$ca in
#找出对应卦序
11)
j=01
;;
12)
j=43
;;
13)
j=14
;;
14)
j=34
;;
15)
j=09
;;
16)
j=05
;;
17)
j=26
;;
18)
j=11
;;
21)
j=10
;;
22)
j=58
;;
23)
j=38
;;
24)
j=54
;;
25)
j=61
;;
26)
j=60
;;
27)
j=41
;;
28)
j=19
;;
31)
j=13
;;
32)
j=49
;;
33)
j=30
;;
34)
j=55
;;
35)
j=37
;;
36)
j=63
;;
37)
j=33
;;
38)
j=36
;;
41)
j=25
;;
42)
j=17
;;
43)
j=21
;;
44)
j=51
;;
45)
j=42
;;
46)
j=03
;;
47)
j=27
;;
48)
j=24
;;
51)
j=44
;;
52)
j=28
;;
53)
j=50
;;
54)
j=32
;;
55)
j=57
;;
56)
j=48
;;
57)
j=18
;;
58)
j=46
;;
61)
j=06
;;
62)
j=47
;;
63)
j=64
;;
64)
j=40
;;
65)
j=59
;;
66)
j=29
;;
67)
j=04
;;
68)
j=07
;;
71)
j=33
;;
72)
j=31
;;
73)
j=56
;;
74)
j=62
;;
75)
j=53
;;
76)
j=39
;;
77)
j=52
;;
78)
j=15
;;

81)
j=12
;;
82)
j=45
;;
83)
j=35
;;
84)
j=16
;;
85)
j=20
;;
86)
j=08
;;
87)
j=23
;;
88)
j=02
esac

cat ./gy/$j.txt
#输出对应卦序经文,
rm -rf ./qg/*
#删除之前生成的所有文件,以便下次起卦时不会出现上一卦内容。

本文出自 “星河码头” 博客,请务必保留此出处http://liy607.blog.51cto.com/2892862/1350900
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: