diary博客管理脚本

随着时间的推移,我熟练的掌握了Gitlab及Github上部署博客的技术,同时也是坚持写博客。但是每次都重复一系列操作很是不方便,于是产生了撰写一个bash脚本的想法,于今天正式写成一个初级可有物版本,且它可以自动安装,很是方便,待以后慢慢改进。安装此脚本前请先确保使用Hexo编写博客的各项工作都已经提前做好了,以后本脚本会追加自动检测处理这些依赖问题。

更新说明

2022-10-15更新
1
2
3
4
5
6
7
8
9
10
11
12
13
DIARYTOP=$MDSource/北京师范大学工作日记.md
DiaryPushX(){
if [ -e $DIARYTOP ]; then
sed -i "1,9s/^date:.*$/date: ${LASTDATE}/g" $DIARYTOP
fi
cd $DIARYPATH
git add .
git commit -m "$COMMENT"
git push
cd $NOWPATH
}
DIARYVERSION="diary version: V2.4"
echo $DIARYVERSION

其中第1行,设置了一篇永远保持最新的文件。原本Hexo有设置顶置的功能,只需更换一个排序插件即可。但是这些插件都有各种各样的问题,综合考虑不如使用默认的按发表时间排序,但是作为一篇工作日记我希望每次打开这篇日记都 是第一篇,这样可以提高效率。既然遵守按时间排序,所以每次push之前,我需使用sed将该日记文件的时间更改为当前新时间,这样子每次这篇日记将是所有日志里面最新的。

上述代码第4行,使用了sed命令来处理DIARYTOP ,其中选项-i 表示直接写入文件,1,9表示从第1行到第9行搜索,s表示查找并替换,其中也使用了正则表达式。^date表示以date开头的行,其中.表示任意一个字符,*表示将前面的字符重复若干次,$表示一行结尾,整个操作的部分使用英文双引号,这样可以直接使用bash脚本中的变量,如此便实现了每次push前先更新DIARYTOP的日期。

第12行是新加的版本号变量,同时第13行是以-v--version 选项执行程序时输出版本号。

具体代码实现

为了运行程序时名称调用的方便去掉了后缀.sh,而直接以diary命名此脚本。

/usr/local/bin/diary
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#! /bin/sh
#
# Program : diary.sh
# Author : fengzhenhua
# Version : V2.4
# Email : fengzhenhua@outlook.com
# CopyRight: Copyright (C) 2022-2025 FengZhenhua(冯振华)
# License : Distributed under terms of the MIT license.
#
#=========================变更历史=========================
# 2022-10-01 新建脚本,支持在gitlab上写文章
# 2022-10-02 修改使用帮助菜单
# 2022-10-14 重构了脚本,更加智能
# 2022-10-14 优化了脚本,同时增加了安装程序
# 2022-10-15 确保"北京师范大学工作日记.md"永远顶置
# 2022-10-15 加入输出版本号命令
#
#=========================参数配置=========================
DIARYNAME=diary
DIARYVERSION="diary version: V2.4"
DIARYEXEPATH=/usr/local/bin
DIARYSource=~/.DiarySource
DIARYPATH=$DIARYSource/fengzhenhua.gitlab.io
DIARYPCLONESITE=git@gitlab_fengzhenhua:fengzhenhua/fengzhenhua.gitlab.io
DIARYEXE=$DIARYEXEPATH/$DIARYNAME
NOWPATH=$PWD
COMMENT=$HOSTNAME-$(date "+%Y%m%d")
MDSource=$DIARYPATH/source/_posts
LASTDATE=$(date -d today +"%Y-%m-%d %H:%M:%S")
DIARYTOP=$MDSource/北京师范大学工作日记.md
#
#=========================安装脚本=========================
DIARYINSTALL(){
sudo cp $0 $DIARYEXE
sudo chmod 755 $DIARYEXE
echo "diary命令已经安装到标准位置$DIARYEXEPATH,帮助请执行: diary --help "
exit
}
if [ ! -e $DIARYEXE ]; then
DIARYINSTALL
elif [ ! $# -eq 0 ]; then
if [ $1 == "-i" -o $1 == "--install" ]; then
DIARYINSTALL
fi
fi
#
#=========================定义函数=========================
DIARYClone(){
git clone $DIARYPCLONESITE $DIARYPATH
echo "博客源文档目录$DIARYPATH已经下载成功,请执行diary.sh编辑博客,祝您工作愉快!"
exit
}
DiaryPull(){
cd $DIARYPATH
git pull &> /dev/null
cd $NOWPATH
files=$(ls $MDSource/)
}
DiaryPushX(){
if [ -e $DIARYTOP ]; then
sed -i "1,9s/^date:.*$/date: ${LASTDATE}/g" $DIARYTOP
fi
cd $DIARYPATH
git add .
git commit -m "$COMMENT"
git push
cd $NOWPATH
}
DiaryPush(){
echo "现在是否发布博客:Y/n ?"; read QueRen
if [ $QueRen == "Y" -o $QueRen == "y" ]; then
DiaryPushX
else
echo "手动发布博客,请使用选项: -d "
fi
}
DiaryHelp(){
echo " 用法:$DIARYNAME [选项] 文章标题"
echo " 选项参数: "
echo " -d 上载博客文章"
echo " -r 删除博客文章"
echo " -i --install 重新安装"
echo " -h --help 帮助"
}
#
#=========================下载博客=========================
if [ ! -e $DIARYSource ]; then
mkdir -p $DIARYSource
exit
fi
if [ ! -e $DIARYPATH ]; then
mkdir -p $DIARYPATH
DIARYClone
else
if [ ! -s $DIARYPATH ]; then
rm -rf $DIARYPATH
DIARYClone
fi
fi
#
#=========================管理博客=========================
num=1
if [ $# -eq 0 ]; then
DiaryPull
for file in $files
do
echo "[$num] $file"
let num+=1
done
echo "请选择要编辑文件的编号:" ; read Snum
num=1
for file in $files
do
if [ $num -eq $Snum ]; then
nvim $MDSource/$file
fi
let num+=1
done
DiaryPush
else
if [ $1 == "-v" -o $1 == "--version" ]; then
echo $DIARYVERSION
elif [ $1 == "-h" -o $1 == "--help" ]; then
DiaryHelp
elif [ $1 == "-d" ];then
DiaryPushX
elif [ $1 == "-r" ];then
DiaryPull
for file in $files
do
echo "[$num] $file"
let num+=1
done
echo "请选择要删除文件的编号:" ; read Snum
num=1
for file in $files
do
if [ $num -eq $Snum ]; then
rm $MDSource/$file
echo "成功删除文件:$file"
exit
fi
let num+=1
done
else
DiaryPull
ls $MDSource/*$1* &> /dev/null
if [ $? -eq 0 ]; then
subfiles=$(ls $MDSource/*$1*)
for subfile in $subfiles
do
for file in $files
do
if [ $MDSource/$file = $subfile ]; then
echo "[$num] $file"
let num+=1
fi
done
done
if [ $num -gt 2 ]; then
num=1
echo "请选择要编辑文件的编号:" ; read Snum
for subfile in $subfiles
do
for file in $files
do
if [ $MDSource/$file = $subfile ]; then
if [ $Snum -eq $num ]; then
nvim $subfile
fi
let num+=1
fi
done
done
else
nvim $subfile
fi
else
cd $DIARYPATH
hexo n $1 &> /dev/null
nvim $MDSource/$1.*
cd $NOWPATH
fi
DiaryPush
fi
fi