Skip to content

Commit f3281ea

Browse files
committed
new blog: bash-scripting-intro.md
1 parent acce618 commit f3281ea

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
---
2+
title: Bash脚本入门
3+
pin: false
4+
---
5+
6+
最近看完了[这本](https://github.com/bobbyiliev/introduction-to-bash-scripting)介绍Bash脚本的书。
7+
8+
对Linux感兴趣的你肯定对Bash脚本并不陌生,在折腾Linux和编译奇奇怪怪的开源软件时肯定也执行过Bash脚本,并惊叹于它的神奇。
9+
10+
下面是我的第一个脚本:
11+
12+
```bash
13+
#!/bin/zsh
14+
echo "There was a tenor named Springer,"
15+
echo "Got his testicles caught in a wringer."
16+
echo " He hollered in pain"
17+
echo " As they rolled down the drain,"
18+
echo "(falsetto):\"There goes my carrer as a singer!\""
19+
```
20+
21+
把这个脚本添加到Shell的配置文件里,这样每次打开终端都会打印这个小笑话。很有意思,它已经陪了我一年多了。
22+
23+
最初我是在纪录片Code Rush中看到的,然后就抄了过来。纪录片B站有转载,[精准空降](https://www.bilibili.com/video/BV19Y4y1i798?t=1120.7)
24+
25+
找来这本书的原因是最近敲`docker`命令敲太多遍了,我又不想在自己笔记本上装**各种**。所以打算找本Bash脚本的书看看,然后写个脚本把项目的重新部署给自动化一下,免去重复敲相同命令的痛苦。
26+
27+
其他的书也很多,选这本主要因为它内容较少。少看多写,更多的还是要在实践中学习。
28+
29+
下面就是我的学习成果:
30+
31+
```bash
32+
#!/usr/bin/env bash
33+
34+
# color variables
35+
blue='\e[34m'
36+
green='\e[32m'
37+
red='\e[31m'
38+
clear='\e[0m'
39+
40+
# color functions
41+
ColorGreen() {
42+
echo -ne $green$1$clear
43+
}
44+
ColorBlue() {
45+
echo -ne $blue$1$clear
46+
}
47+
ColorRed() {
48+
echo -ne $red$1$clear
49+
}
50+
51+
err_check() {
52+
# 检查命令是否成功执行
53+
# 命令执行成功 输出 $1, 否则输出 $2
54+
if [[ $? -eq 0 ]]; then
55+
ColorGreen $1
56+
echo ""
57+
else
58+
ColorRed $2
59+
exit 1
60+
fi
61+
}
62+
63+
project=$1
64+
65+
if [[ -z $project ]]; then
66+
ColorRed "请将项目名称作为脚本参数"
67+
exit 1
68+
fi
69+
70+
ColorBlue "当前项目📂:"
71+
echo ${project}
72+
73+
ssh root@${server1} "docker compose -f /root/${project}/docker-compose.yml down -v &>/dev/null"
74+
err_check "🐳服务已停止" "服务未停止"
75+
76+
ColorBlue "开始复制项目文件到:"
77+
echo 🖥️$server1
78+
79+
scp -r . root@${server1}:/root/${project} 1>/dev/null
80+
err_check "复制结束" "文件拷贝错误❌"
81+
82+
ColorBlue "开始重建容器🐳"
83+
echo ""
84+
85+
ssh root@${server1} "docker compose -f /root/${project}/docker-compose.yml build --no-cache && docker compose -f /root/${project}/docker-compose.yml up -d"
86+
err_check "📂$project 服务已重新部署" "🐳容器部署错误❌"
87+
```
88+
89+
注意执行远程命令时,只有双引号包裹的命令才会把变量替换成实际的值,单引号就直接原样执行了。
90+
91+
最后附个小抄 <https://devhints.io/bash>

0 commit comments

Comments
 (0)