在Linux中为终端输出添加彩色颜色

给 Linux 系统的终端输出添加颜色

使用echo -e命令来显示彩色,输入命令时需要添加一些参数来指定显示什么颜色。

命令格式

shell 脚本中 echo 命令显示内容带颜色显示,格式如下:

1
echo -e "\e[字体背景颜色;字体颜色;字体属性m] 需要输出的内容 \e[0m"

在以上命令中出现的参数意思如下:

\e 代表转义起始符,定义一个转义序列

  • \e[表示开始定义颜色。

  • 字背景颜色使用 int 类型来表示,范围为 40-47 。

  • 字体颜色使用 int 类型来表示,范围 30-37 。

  • m 代表转义终止符,表示颜色定义完毕。

  • 在要输出的内容后面跟上\e[ ,表示再次开启颜色定义,0 表示颜色定义结束,所以 \e[0m 的作用是恢复之前的配色方案。

字体颜色

字体颜色使用 int 类型来表示,范围值为 30-37,下面是具体值所代表的的颜色:

  • 默认=0
  • 黑色=30
  • 红色=31
  • 绿色=32
  • 黄色=33
  • 蓝色=34
  • 紫色=35
  • 天蓝色(青色)=36
  • 白色=37
1
2
3
4
5
6
7
8
# echo -e "\e[30m 黑色 \e[0m"
# echo -e "\e[31m 红色 \e[0m"
# echo -e "\e[32m 绿色 \e[0m"
# echo -e "\e[33m 黄色 \e[0m"
# echo -e "\e[34m 蓝色 \e[0m"
# echo -e "\e[35m 紫色 \e[0m"
# echo -e "\e[36m 青色 \e[0m"
# echo -e "\e[37m 白色 \e[0m"

以下为输出:

字体背景颜色

字体背景颜色使用 int 来表示,范围值为 40-47,下面是具体值所代表的颜色:

  • 默认=0
  • 黑色=40
  • 红色=41
  • 绿色=42
  • 黄色=43
  • 蓝色=44
  • 紫色=45
  • 天蓝色(青色)=46
  • 白色=47

下面是具体的一个例子:

1
2
3
4
5
6
7
8
echo -e "\e[40m 黑底 \e[0m"
echo -e "\e[41m 红底 \e[0m"
echo -e "\e[42m 绿底 \e[0m"
echo -e "\e[43m 黄底 \e[0m"
echo -e "\e[44m 蓝底 \e[0m"
echo -e "\e[45m 紫底 \e[0m"
echo -e "\e[46m 青底 \e[0m"
echo -e "\e[47m 白底 \e[0m"

以下为输出:

字体属性

字体属性使用 int 类型来表示,范围值从 1 开始,但常用的我们就用 1-5,下面是具体值所代表的意思:

  • 字体加粗=1
  • 字体倾斜=3
  • 字体下划线=4
1
2
3
4
5
#!/bin/bash
echo -e "\e[43;0m 默认 \e[0m"
echo -e "\e[43;1m 字体加粗 \e[0m"
echo -e "\e[43;3m 字体倾斜 \e[0m"
echo -e "\e[43;4m 字体下划线 \e[0m"

以下为输出:

另外,字体属性可以叠加:

1
2
#!/bin/bash
echo -e "\e[43;1;3;4m 字体加粗,倾斜,下划线 \e[0m"

以下为输出:

示例

1
echo -e "\e[41;34;1;3;4;5m [error] \e[0m" "\e[1;3m 测试输出 \e[0m"

上面命令则意味着,以 41(红色)的字体背景颜色、34(蓝色)的字体颜色、字体属性为 1、3、4、5 叠加,输出 [error] 内容;

后面那一段还有格式化输出,以字体属性为 3 和 3 叠加,其他保持默认的方式进行输出。效果如下:

基础脚本

这些带颜色的输出可以抽象成一个日志脚本,在该脚本中分为不同等级的日志输出,从低到高分别为:

  • debug
  • info
  • warn
  • error

然后不同等级的日志输出则有不同的背景颜色,能让人在输出中一眼定位到。将这些函数封装成一个基础脚本,然后在目标脚本内使用 source basic.sh 的方式去使用该脚本内的函数。

下面是脚本内容以及其注释:

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

## this is about script of console color print
## 'echo -e' command make console color printing possible
## 'echo -e' format in following:
## echo -e "\e[字体背景颜色;字体颜色;字体属性m] 需要输出的内容 \e[0m"

## \e代表转义起始符,定义一个转义序列
## [ 表示开始定义颜色。
## 字背景颜色 范围 40-47 。
## 字体颜色 范围 30-37 。
## m 转义终止符,表示颜色定义完毕。
## 再次使用 \e[ ,表示再次开启颜色定义,0 表示颜色定义结束,所以 \e[0m 的作用是恢复之前的配色方案。

## NOTE: typeface background color,typeface color and typeface attribute are represented by numbers of type int.

## typeface background number on between 40~47
## e.g :
## 默认=0
## 黑色=40
## 红色=41
## 绿色=42
## 黄色=43
## 蓝色=44
## 紫色=45
## 天蓝色(青色)=46
## 白色=47

## typeface color number on between 30~37
## e.g:
## 默认=0
## 黑色=30
## 红色=31
## 绿色=32
## 黄色=33
## 蓝色=34
## 紫色=35
## 天蓝色(青色)=36
## 白色=37


## The commonly used number for typeface attribute is between 0~5
## e.g
## 字体加粗=1
## 字体倾斜=3
## 字体下划线=4
## e.g:
## echo -e "\e[41;34;1;3;4;5m [error] \e[0m" "\e[1;3m $1 \e[0m"
## the command above following effects will occur:
## typeface background color are 41 (红色), typeface color are 34(蓝色), typeface attribute are 1 and 3(字体加粗和字体倾斜)

error() {
echo -e "\e[41;34;1;3;4;5m [error] \e[0m" "\e[1;3m $1 \e[0m"
exit 1
}

debug() {
echo -e "\e[42;34;1;3;4;5m [debug] \e[0m" "\e[1;3m $1 \e[0m"
}

info() {
echo -e "\e[42;34;1;3;4;5m [info] \e[0m" "\e[1;3m $1 \e[0m"
}

在Linux中为终端输出添加彩色颜色
https://sunshinechen.cn/2024/03/01/在Linux中为终端输出添加彩色颜色/
作者
sunshine
发布于
2024年3月1日
许可协议