随着时间的推移,我熟练的掌握了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/diary1 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
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
|