介绍
echo
命令将给定的字符串输出到 标准输出管,通常指向终端。 虽然标准输出管道可以指向其他接口—— echo
命令通常用于在终端中打印和显示消息。 默认情况下,显示的消息文本继承终端中其他文本的颜色(可自行自定义)。 但是 - 有几种方法可以改变输出颜色 echo
– 对于单个字符串和整个消息。
在这个简短的指南中,我们将看看如何更改输出颜色
echo
在基于 Linux 的系统中,使用 ANSI 转义码,tput
以及如何使这个过程在 Bash 脚本中不那么冗长。
使用 ANSI 转义码更改输出颜色
更改颜色的最简单方法是通过 ANSI 转义序列/代码。 所有 ANSI 转义码都以 Escape
字符,可以用各种格式表示—— 27
十进制, x1B
十六进制,作为控制键 ^[
或 33
八进制格式。 序列之后是命令:
33[command
其中左括号 (控制序列介绍器) 是可选的,但有助于将命令与转义字符分开。 当你放一个 色标 作为命令,它会改变即将到来的文本的颜色:
33[0;34
0;34
例如,是蓝色的代码。 仅此一项,您就可以更改文本的颜色 echo
使用:
33[0;34Text
其中 Text
将被染成蓝色。 或者,考虑一个简单的 bash 脚本来打印 “欢迎来到法国” 法国国旗的颜色:
#!/bin/bash
BLUE='33[0;34m'
WHITE= '33[0;37m'
RED= '33[0;31m'
echo -e "${Blue}Welcome ${WHITE}to ${RED}France"
可选的 -e
的标志 echo
命令允许您使用特殊字符,例如 n
(换行)和 t
(选项卡)在输入字符串内。
运行脚本后:
$ ./colors.sh
结果是:
ANSI 代码不仅限于颜色,还可以应用于样式。 代码 0..9
表示文本样式,而代码 30...37
代表颜色:
颜色 | 代码 | 文字样式 | 代码 |
黑色 | 30 | 简单文字 | 0 |
红色 | 31 | 大胆的文字 | 1 |
绿色 | 32 | 低强度文本 | 2 |
棕色/橙色 | 33 | 下划线文字 | 4 |
蓝色 | 34 | 闪烁的文字 | 5 |
紫色 | 35 | 隐形文字 | 8 |
青色 | 36 | 删除线文本 | 9 |
浅灰色 | 37 |
让我们创建一个 bash 脚本来探索其中一些选项:
#!/bin/bash
echo -e "33[0;33mSample text"
echo -e "33[1;33mBold text"
echo -e "33[2;33mLow intensity text"
echo -e "33[4;33mUnderline text"
echo -e "33[5;33mBlinking text"
echo -e "33[8;33mInvisible text"
echo -e "33[9;33mStrikethrough text"
运行此脚本会导致:
查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!
同样,您可以使用代码更改这些文本的背景颜色 40..47
:
颜色 | 代码 |
黑色 | 40 |
红色 | 41 |
绿色 | 42 |
棕色/橙色 | 43 |
蓝色 | 44 |
紫色 | 45 |
青色 | 46 |
浅灰色 | 47 |
更改给定字符串的背景归结为与更改字体颜色时相同的规则——代码本身会更改行为:
#!/bin/bash
BLUE='33[0;44m'
BLACK='33[0;30m'
WHITE='33[0;30;47m'
RED='33[0;41m'
echo -e "${BLUE}Welcome ${WHITE}to ${RED}France"
请注意: 根据经验,您可以通过添加 10 将字体颜色转换为背景颜色。 30
是黑色字体颜色, 40
是黑色背景颜色。
使用 tput 更改输出颜色
ANSI 代码的替代方法是使用 tput
命令:
$ tput setaf color_code
setf
允许 8 种颜色,而 setaf
允许 256 种颜色,因此根据您使用的命令,您可以在 0..7
和 0..255
作为颜色代码。 以上皆是 命令专用 0..7
到相同的颜色代码,而与 setaf
, 8..15
是高强度的颜色,并且 16..231
是前 8 个不同的色调,并且 232..255
是灰度颜色:
信用: 维基百科上的数据
最后, tput
还允许您使用其他命令更改背景颜色、添加粗体、降低强度等:
文字样式 | 命令 |
前景色 | 塞塔夫 |
背景颜色 | 设置 |
没有风格 | sgv0 |
大胆的文字 | 无所畏惧 |
低强度文本 | 暗淡 |
下划线文字 | 斯穆尔 |
闪烁的文字 | 眨 |
反转文本 | 转 |
让我们创建另一个使用 tput
更改输出颜色 echo
:
#!/bin/bash
YELLOW=`tput setaf 3`
echo "${YELLOW}Changing"
WHITE=`tput setaf 7 bold`
echo "${WHITE}Colors"
BLUE=`tput setaf 4 smul`
echo "${BLUE}With tput"
CYAN=`tput setaf 6 blink`
echo "${CYAN}is less"
RED=`tput setab 1 setaf 7`
echo "${RED}verbose!"
此脚本将在终端中打印以下输出:
tput 命令提供了一种通过简单颜色代码打印任何颜色的简单方法。 现在让我们创建一个脚本,该脚本可以打印 tput 命令可用的每种颜色代码:
#!/bin/bash
tput init
end = $ (($ (tput colors) - 1))
w = 1
for c
in $ (seq 0 $end)
do
eval "$(printf " tput setaf % 3 s " " $c ")"
echo - n "$_"
[[$c - ge $ ((w * 2))]]
offset = 2 || offset = 0
[[$ (((c + offset) % (w - offset))) - eq $ (((w - offset) - 1))]]
echo
done
tput init
它将打印 0 到 255 颜色及其代码:
结论
在这个简短的指南中——我们已经了解了如何更改 echo
在 Linux 中的输出——使用 ANSI 转义序列和 tput
命令。
我们还探讨了如何使用 Bash 变量、调整背景颜色和样式文本来减少流程的冗长。