shell中使用echo命令输出信息及带颜色的文本

echo

shell 中有个内置的命令 echo 用来输出信息,在默认情况下输出位置是屏幕。

1
2
3
[user1@study ~]$ echo "Hello World"
Hello World
[user1@study ~]$

此外 echo 命令还可以改变样式,以输出不同颜色的文本,但是必须有 -e 选项(开启 echo 中的转义)。

格式如下

1
2
echo -e "\033[字背景颜色;文字颜色m 字符串\033[0m" 
echo -e "\033[1;36;41m Something here \033[0m"
  • \033 代表键盘的 Ctl 键或 Esc
  • 1 代表字体行为(高亮,闪烁,下划线等);
  • 36 代表字体的颜色
  • 41 的位置代表背景色

注意:字背景颜色和文字颜色之间是英文的分号 ;,并且文字颜色后面有个 m ,字符串前后可以没有空格,如果有的话,输出也是同样有空格

在 Bash 中,Esc 字符可以用以下的语法来表示:

  • \e
  • \033
  • \x1B

文字和背景颜色搭配

字体颜色范围是 30~37

1
2
3
4
5
6
7
8
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

字体背景颜色范围是 40~47

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

不同的控制选项决定了字体输出的属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
\033[0m # 关闭所有属性 
\033[1m # 设置高亮度
\033[4m # 下划线
\033[5m # 闪烁
\033[7m # 反显
\033[8m # 消隐
\033[30m — \33[37m # 设置前景色
\033[40m — \33[47m # 设置背景色
\033[60A # 光标上移60行
\033[60B # 光标下移60行
\033[60C # 光标右移60行
\033[60G # 光标右移60行
\033[60D # 光标左移60行
\033[y;xH # 设置光标位置
\033[2J # 清屏
\033[K # 清除从光标到行尾的内容
\033[s # 保存光标位置
\033[u # 恢复光标位置
\033[?25l # 隐藏光标
\033[?25h # 显示光标

一些需要注意的地方

  • 前景颜色各数字是对应背景颜色减去10
  • 结束非常规字符序列的 m 要紧跟前面的数字,不能有空格
  • 命令也可以写 成echo -e "^[[44;37;5m ME \033[0m COOL",其中的 ^[ 需要先按 Ctrl + V 键 ,然后再按 ESC 键生成

参考

在 RedHat 系统的 /etc/sysconfig/init 文件中有事先设置好的输出方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# color => new RH6.0 bootup
# verbose => old-style bootup
# anything else => new style bootup without ANSI colors or positioning
BOOTUP=color
# column to start "[ OK ]" label in
RES_COL=60
# terminal sequence to move to that column. You could change this
# to something like "tput hpa ${RES_COL}" if your terminal supports it
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
# terminal sequence to set color to a 'success' color (currently: green)
SETCOLOR_SUCCESS="echo -en \\033[0;32m"
# terminal sequence to set color to a 'failure' color (currently: red)
SETCOLOR_FAILURE="echo -en \\033[0;31m"
# terminal sequence to set color to a 'warning' color (currently: yellow)
SETCOLOR_WARNING="echo -en \\033[0;33m"
# terminal sequence to reset to the default color.
SETCOLOR_NORMAL="echo -en \\033[0;39m"

拓展

文字颜色

对于在文本颜色上使用 256 种颜色之一,控制序列是 <Esc>[38;5;ColorNumberm,其中 ColorNumber 是下列颜色值之一:

示例:

1
echo -e "\e[38;5;82mHello \e[38;5;198mWorld"

1
for i in {16..21} {21..16} ; do echo -en "\e[38;5;${i}m#\e[0m" ; done ; echo

背景颜色

对于在背景上使用 256 种颜色之一,控制序列是 <Esc>[48;5;ColorNumberm,其中 ColorNumber 是下列颜色值之一:

示例:

1
echo -e "\e[40;38;5;82m Hello \e[30;48;5;82m World \e[0m"

1
for i in {16..21} {21..16} ; do echo -en "\e[48;5;${i}m \e[0m" ; done ; echo

示范

16中颜色值的颜色与格式

下面的 colors_and_formatting.sh 脚本显示了许多可能的属性组合(但不是全部,因为它一次只使用一个格式化属性)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.

#Background
for clbg in {40..47} {100..107} 49 ; do
#Foreground
for clfg in {30..37} {90..97} 39 ; do
#Formatting
for attr in 0 1 2 4 5 7 ; do
#Print the result
echo -en "\e[${attr};${clbg};${clfg}m ^[${attr};${clbg};${clfg}m \e[0m"
done
echo #Newline
done
done

exit 0

256 种颜色值

以下 256-colors.sh 脚本显示某些终端和终端模拟器(如 xterm 和 gnome 终端)上可用的 256 中颜色。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.

for fgbg in 38 48 ; do # Foreground / Background
for color in {0..255} ; do # Colors
# Display the color
printf "\e[${fgbg};5;%sm %3s \e[0m" $color $color
# Display 6 colors per lines
if [ $((($color + 1) % 6)) == 4 ] ; then
echo # New line
fi
done
echo # New line
done

exit 0

一个不错的网站

Colors and formatting (ANSI/VT100 Control sequences)

有钱任性,请我吃包辣条
0%