背景
前一段时间我听v友安利,在vscode山安装了写代码自动完成插件

发现它的自动补全功能非常好用,工作中golang是我的主力开发语言,很多情况下,我都会优先使用golang完成我的工作,shell脚本使用的并不多
机缘巧合,有一次,我不得不使用shell来写一个优化我工作流的脚本,之前写shell脚本非常痛苦,对shell语法不熟,每次现写,都要现百度,才能找到我想要的语法。而这次,神奇的是,在我敲打几个字符之后,该插件就自动给我补全了一大堆逻辑,不到几分钟的时间,我就完成了一个脚本。而后,该脚本给我节省了大量的debug部署代码的时间。
好奇,工作流是什么
这个工作流是这样的,我们有一台test服务器,服务器上部署了我司全量服务,于是乎,当这台服务器给到其他人使用的时候,难免会遇到各种问题。定位问题、调试问题、解决问题,就需要一个强有力的后台汇聚各种信息到一起进行决策。
于是乎,我们的8874运维后台就出来了,至于为啥叫8874后台,因为啊,这个后台是web服务,服务的端口是8874,叫着叫着也就顺口了。
前面讲的都是废话,现在我们来看一下工作流,我们的这个后台啊,更新频繁,需要添加各种各样的功能,每次修改完代码,都需要
- 打包程序以及资源文件
- 上传到服务器
- 解压到指定位置
- 重启服务
执行这4步操作,是不是可以写一个脚本,自动化执行这4步操作呢
于是乎,这个脚本就在该插件的帮助下
这牛掰的脚本长啥样呢
脚本没有什么特别之处,但就是节省了我大量的部署时间
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
|
#!/bin/sh
function scp_and_install() {
echo "scp_and_install ---> $1"
echo "scp program_name.tar to ${1}..."
ssh root@$1 "rm -rf /root/tmp && mkdir -p /root/tmp"
scp -O program_name.tar root@$1:/root/tmp
echo 'scp ok'
echo 'tar -xf program_name.tar...'
ssh root@$1 "rm -rf /root/tmp/dist"
ssh root@$1 "tar -xf /root/tmp/program_name.tar -C /root/tmp/ --warning=no-unknown-keyword"
echo 'tar ok'
echo 'sh /root/tmp/dist/install.sh'
ssh root@$1 "sh /root/tmp/dist/install.sh"
echo 'install ok'
echo 'systemctl restart program_name'
ssh root@$1 "systemctl restart program_name"
echo 'systemctl ok'
echo ''
}
CURRENT_DIR=$(dirname "$0")
PWD=$(pwd)
echo 'building program_name...'
GOOS=linux sh $CURRENT_DIR/build.sh
echo 'build ok'
FILE=$PWD/config/test-ip-all.txt
if [ "0${1}" != "0" ]; then
FILE=$PWD"/config/test-ip-"${1}".txt"
fi
LIST=$(cat $FILE)
echo ''
for i in ${LIST}; do
scp_and_install $i
done
echo "all finish"
rm -rf program_name.tar program_name
|
更多脚本
hugo博客自动生成post
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
|
#!/bin/bash
if [ $# -lt 2 ]; then
echo "Usage: $0 <category> <title>"
exit
fi
CATEGORY=$1
TITLE=$2
SLUG=$(date +%Y-%m-%d-%H-%M-%S)
DATE=$(date +%Y-%m-%d)
mkdir -p ./content/post/$CATEGORY/$SLUG
YAML=$(cat content.template)
cp content.template ./content/post/$CATEGORY/$SLUG/index.md
if [ "$(uname)" = "Darwin" ]; then
sed -i '' 's/SLUG/'${SLUG}'/g' ./content/post/$CATEGORY/$SLUG/index.md
sed -i '' 's/DATE/'${DATE}'/g' ./content/post/$CATEGORY/$SLUG/index.md
sed -i '' 's/CATEGORY/'${CATEGORY}'/g' ./content/post/$CATEGORY/$SLUG/index.md
sed -i '' 's/TITLE/'${TITLE}'/g' ./content/post/$CATEGORY/$SLUG/index.md
else
sed -i 's/SLUG/'${SLUG}'/g' ./content/post/$CATEGORY/$SLUG/index.md
sed -i 's/DATE/'${DATE}'/g' ./content/post/$CATEGORY/$SLUG/index.md
sed -i 's/CATEGORY/'${CATEGORY}'/g' ./content/post/$CATEGORY/$SLUG/index.md
sed -i 's/TITLE/'${TITLE}'/g' ./content/post/$CATEGORY/$SLUG/index.md
fi
echo "File created: ./content/post/$CATEGORY/$SLUG/index.md"
code . ./content/post/$CATEGORY/$SLUG/index.md
hugo server
|
列举出hugo博客下的所有文章
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/bash
function print_file_title() {
TITLE=$(grep -m 1 'title:' $1 | head -n 1 | cut -d':' -f2 | xargs)
if [ ! -z "$TITLE" ]; then
echo $TITLE"(${1})"
fi
}
FILES=$(find ./ -name "*.md")
for file in $FILES
do
print_file_title $file
done
|