使用Shell脚本新建博文生成多个语言Markdown文件

在使用Hugo写博客的时候,添加一遍博文,如果内容是支持多语言的话,添加每种语言markdown文件都需要执行一次Hugo命令,着实非常不方便,于是乎写一个Shell脚本就可以解决这个非常不愉快的操作体验,具体可以写一个Shell脚本去一次性的完成这个重复而没有任何意义的操作。仔细分析一下这个要写的Shell脚本,其实非常简单就可以实现: 定义一个目录常量,定义一语言数组,让用户输入三个参数,其中前两个是必传参数,最后一个参数是可选参数,依次表示,要生成的markdown文件存放目录,markdown文件名,以及是否要使用日期目录。

 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
#!/bin/bash

####################################################################
# 定义变量区
####################################################################

# Markdown 文件扩展名.
MARKDOWN_FILE_EXTENSION=".md"
# Markdown 目录.
MARKDOWN_CONTENT_DIR="./content"
# 语言数组定义
MARKDOWN_CONTENT_LANGUAGES=("chinese" "english")
# 当前日期
CURRENT_DATE=`date +"%Y-%m-%d"`

####################################################################
# 定义函数区
####################################################################

# PrintLogFunc 格式化打印日志函数.
# 该函数有两个参数:
# 第一个参数: 日志信息的描述信息.
# 第二个参数: 输出文字渲染颜色.
function PrintLogFunc()
{
  log_info=$1
  use_color=$2

  # 如果{输出文字渲染颜色}长度为0时,则使用默认颜色.
  if [ -z "$use_color" ]; then
    use_color=0
  fi

  # 如果{输出文字渲染颜色}参数为1时,时使用{蓝色}文字,否则默认文字颜色.
  if [ $use_color = "WARNING" ]; then
    echo -e "\n\033[31m[`date +"%Y-%m-%d %H:%M:%S"`] WARNING - ${log_info} \033[0m"
  elif [ $use_color = "INFO" ]; then
    echo -e "\n\033[32m[`date +"%Y-%m-%d %H:%M:%S"`] INFO - ${log_info} \033[0m"
  else
    echo "[`date +"%Y-%m-%d %H:%M:%S"`] DEBUG - ${log_info}"
  fi
}


# Shell脚本主流程参数检测.
if [ $# -lt 2 ]; then
  PrintLogFunc "Please enter the correct number of parameters" "WARNING"
  exit 1
fi

# 获取对应的参数.
MARKDOWN_CONTENT_RELATIVE_DIR=$1
MARKDOWN_FILENAME=$2
MARKDOWN_CATEGORY_WITH_DATE="false"
if [ "$3" != "" ]; then
  MARKDOWN_CATEGORY_WITH_DATE="true"
fi

# 实现具体的功能.
for (( i = 0; i < ${#MARKDOWN_CONTENT_LANGUAGES[@]}; i++ )); do
  # Hugo 多语言Markdown文件目录.
  dir="${MARKDOWN_CONTENT_DIR}"
  dir="${dir}/${MARKDOWN_CONTENT_LANGUAGES[${i}]}"
  dir="${dir}/${MARKDOWN_CONTENT_RELATIVE_DIR}"

  # 是否使用日期目录.
  if [ "$MARKDOWN_CATEGORY_WITH_DATE" = "true" ]; then
    dir="${dir}/${CURRENT_DATE}"
  fi

  # 检测目录是否存在,不存在则创建
  if [ ! -d "${dir}" ]; then
    mkdir -p "${dir}"
    PrintLogFunc "${dir} Directory created successfully" "INFO"
  fi

  fullname="${dir}/${MARKDOWN_FILENAME}${MARKDOWN_FILE_EXTENSION}"
  hugo new "${fullname}"
done
comments powered by Disqus