0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

脚本美化高手之轻松实现文本颜色和背景定制的酷炫Shell技巧

马哥Linux运维 来源:马哥Linux运维 2024-12-06 10:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

shell脚本中 echo 和 printf 都可以输出内容。示例1:

echo -e "�33[43;35m david use echo say Hello World �33[0m 
" 

printf "�33[44;36m david use printf say Hello World �33[0m 
" 

echo -e "�33[47;30;5m david use echo say �33[0m Hello World 
"

输出效果如下:
92901f44-b159-11ef-93f3-92fbcf53809c.gif
它的格式是这样的:

echo -e "�33[字背景颜色;字体颜色m 字符串 �33[0m"  或者
printf "�33[字背景颜色;字体颜色m 字符串 �33[0m"  或者
echo -e "�33[字背景颜色;字体颜色m;ascii码m 字符串 �33[0m 字符串(can null) 
" 

格式说明

shell脚本中echo命令是内容显示,echo显示带颜色需要使用参数 -e
格式如下:
echo -e "�33[字背景颜色;文字颜色m字符串�33[0m"
例如:
echo -e "�33[41;36m something here �33[0m"
其中41的位置代表底色, 36的位置是代表字的颜色

注:

1、字背景颜色和文字颜色之间是英文的";"

2、文字颜色后面有个m

3、字符串前后可以没有空格,如果有的话,输出也是同样有空格

特效可以叠加,需要使用“;”隔开,例如:闪烁+下划线+白底色+黑字为 �33[5;4;47;30m闪烁+下划线+白底色+黑字为�33[0m

再来看示例1的第3个命令:

echo -e "�33[47;30;5m david use echo say �33[0m Hello World 
" 

这个命令解释:

47 代表背景色为白色,
30 代表字体为黑色,
5 代表字体闪烁,
0 代表关闭所有属性
输出字符 “david use echo say”,然后重新设置屏幕到缺省设置,输出字符 “Hello World”后颜色回复正常。

-e是echo的一个可选项,用于激活特殊字符的解析器, 也就是对反斜线转义符(即)的解释。�33引导非常规字符序列。意味着设置属性然后结束非常规字符序列,这里起效果的字符是47;30;5和0。修改47;30;5可以生成不同颜色的组合,数值和编码的前后顺序没有关系。

组合命令:

示例2,组合命令:

echo -e "�33[20;1H�33[1;4;32m david use echo say �33[0m Hello World 
"

这行命令首先�33[20;1H将光标移动到终端第20行第1列,之后的�33[1;4;32m将文本属性设置为高亮、带下划线且颜色为绿色,然后输出Hello,world;最后�33[0m将终端属性设为缺省,这样就不会看到连命令完成后的命令提示符也变了样儿了。 输出效果如下:
92a8416e-b159-11ef-93f3-92fbcf53809c.png

我们可以通过各种命令的组合可以实现对终端输出地复杂控制。

输出特效格式控制:

�33[0m  关闭所有属性  
�33[1m   设置高亮度  
�3[4m   下划线  
�33[5m   闪烁  
�33[7m   反显  
�33[8m   消隐  
�33[30m   --   �33[37m   设置前景色  
�33[40m   --   �33[47m   设置背景色

例:
echo -e "�33[31m 红色字 �33[0m"
echo -e "�33[34m 黄色字 �33[0m" 
echo -e "�33[41;33m 红底黄字 �33[0m"
echo -e "�33[41;37m 红底白字 �33[0m" 

字颜色范围(前景颜色):30—–39

echo -e "�33[30m 黑色字 �33[0m" 
echo -e "�33[31m 红色字 �33[0m" 
echo -e "�33[32m 绿色字 �33[0m"
echo -e "�33[33m 黄色字 �33[0m"
echo -e "�33[34m 蓝色字 �33[0m"
echo -e "�33[35m 紫色字 �33[0m" 
echo -e "�33[36m 天蓝字 �33[0m" 
echo -e "�33[37m 白色字 �33[0m" 
38:在缺省的前景颜色上设置下划线 
39:在缺省的前景颜色上关闭下划线

补充:上面的例子中,每行后面都有 �33[0m ,是为了使终端显示的颜色恢复到修改背景和字体颜色之前的状态。

字背景颜色范围(背景颜色):40~47

40:黑 
41:深红 
42:绿 
43:黄色 
44:蓝色 
45:紫色 
46:深绿 
47:白色 
49:设置缺省黑色背景

光标位置等的格式控制:

33[nA 光标上移n行 
33[nB 光标下移n行 
33[nC 光标右移n行 
33[nD 光标左移n行 
33[y;xH设置光标位置 
33[2J 清屏 
33[K 清除从光标到行尾的内容 
33[s 保存光标位置 
33[u 恢复光标位置 
33[?25l 隐藏光标 
33[?25h 显示光标

示例3:

echo -e "�33[0m none �33[0m"
echo -e "�33[30m black �33[0m"
echo -e "�33[1;30m dark_gray �33[0m"
echo -e "�33[0;34m blue �33[0m"
echo -e "�33[1;34m light_blue �33[0m"
echo -e "�33[0;32m green �33[0m"
echo -e "�33[1;32m light_green �33[0m"
echo -e "�33[0;36m cyan �33[0m"
echo -e "�33[1;36m light_cyan �33[0m"

输出效果如下:
92c91466-b159-11ef-93f3-92fbcf53809c.png

echo -e "�33[0;31m red �33[0m"
echo -e "�33[1;31m light_red �33[0m"
echo -e "�33[0;35m purple �33[0m"
echo -e "�33[1;35m light_purple �33[0m"
echo -e "�33[0;33m brown �33[0m"
echo -e "�33[1;33m yellow �33[0m"
echo -e "�33[0;37m light_gray �33[0m"
echo -e "�33[1;37m white �33[0m"

输出效果如下:
92db0c8e-b159-11ef-93f3-92fbcf53809c.png

echo -e "�33[40;37m 黑底白字 �33[0m"
echo -e "�33[41;30m 红底黑字 �33[0m"
echo -e "�33[42;34m 绿底蓝字 �33[0m"
echo -e "�33[43;34m 黄底蓝字 �33[0m"
echo -e "�33[44;30m 蓝底黑字 �33[0m"
echo -e "�33[45;30m 紫底黑字 �33[0m"
echo -e "�33[46;30m 天蓝底黑字 �33[0m"
echo -e "�33[47;34m 白底蓝字 �33[0m"
echo -e "�33[4;31m 下划线红字 �33[0m"
echo -e "�33[5;31m 红字在闪烁 �33[0m"
echo -e "�33[8m 消隐 �33[0m "

输出效果如下:
92e652ba-b159-11ef-93f3-92fbcf53809c.gif

范围参考:

0 重新设置属性到缺省设置
1 设置粗体
2 设置一半亮度(模拟彩色显示器的颜色)
4 设置下划线(模拟彩色显示器的颜色)
5 设置闪烁
7 设置反向图象
8 消隐 
22 设置一般密度
24 关闭下划线
25 关闭闪烁
27 关闭反向图象

// 字体颜范围(前景颜色):30~39
30:黑 
31:红 
32:绿 
33:黄 
34:蓝色 
35:紫色 
36:深绿 
37:白色 

38:在缺省的前景颜色上设置下划线
39:在缺省的前景颜色上关闭下划线

// 字背景颜色范围(背景颜色):40~49 
40:黑 
41:深红 
42:绿 
43:黄色 
44:蓝色 
45:紫色 
46:深绿 
47:白色 

nA 光标上移n行 
nB 光标下移n行 
nC 光标右移n行 
nD 光标左移n行 
y;xH设置光标位置 
2J 清屏 
K 清除从光标到行尾的内容 
s 保存光标位置 
u 恢复光标位置 
?25l 隐藏光标 
?25h 显示光标

预先定义颜色变量

如果是通过bash脚本执行,多次频繁的输出展示,那么可以通过变量简化样式格式引用:

#! /bin/bash
## author:xiongzaiqiren

RED_COLOR='E[1;31m'  
YELOW_COLOR='E[1;33m' 
BLUE_COLOR='E[1;34m'  
RESET='E[0m'

#需要使用echo -e
echo -e  "${RED_COLOR}===david say red color===${RESET}"
echo -e  "${YELOW_COLOR}===david say yelow color===${RESET}"
echo -e  "${BLUE_COLOR}===david say green color===${RESET}"

输出效果如下:
92fd236e-b159-11ef-93f3-92fbcf53809c.png

将自定义颜色格式定义成变量,然后在具体工作是运用的实例。
定义颜色动作, 把echo -en也定义到变量中。使用时直接调用颜色动作即可。
倒计时(利用 来实现回到行首覆盖输出)

#! /bin/bash
## author:xiongzaiqiqren

##### 定义颜色动作, 把echo -en也定义到变量中
SETCOLOR_BLACK="echo -en \E[1;30m"
SETCOLOR_FAILURE="echo -en \E[1;31m"
SETCOLOR_SUCCESS="echo -en \E[1;32m"
SETCOLOR_WARNING="echo -en \E[1;33m"
SETCOLOR_INFO="echo -en \E[1;34m"
SETCOLOR_REMIND="echo -en \E[1;35m"
SETCOLOR_BUG="echo -en \E[1;36m"
SETCOLOR_WHITE="echo -en \E[1;37m"
SETCOLOR_NORMAL="echo  -en \E[0;39m"
SETCOLOR_FLICKER="echo  -en \E[5m"
 
##### 使用时直接调用颜色动作即可
$SETCOLOR_BLACK && echo BLACK
$SETCOLOR_FAILURE && echo FAILURE   
$SETCOLOR_SUCCESS && echo SUCCESS   
$SETCOLOR_WARNING && echo WARNING   
$SETCOLOR_INFO && echo INFO
$SETCOLOR_BUG && echo BUG
$SETCOLOR_REMIND && echo REMIND
$SETCOLOR_WHITE && echo WHITE
$SETCOLOR_NORMAL  && echo NORMAL

$SETCOLOR_FLICKER  && echo FLICKER
$SETCOLOR_NORMAL  && echo NORMAL


##### 其他测试
echo "输出内容,行末自带换行符";
echo -n "输出内容,取消行末换行符(内容输出后不换行)";
echo "这是接着前面的(没有新的行)";

echo -e "e[1;33;5m 闪烁文字 e[0m"

# 倒计时(利用
来实现回到行首覆盖输出)
for i in {1..100}; do echo -en "
 $i%"; sleep 1; done;

以上代码在Linux服务器上保存为 myDisplay.sh 文件,并赋予可执行权限。然后看到效果。
运行结果如图:
930cb6da-b159-11ef-93f3-92fbcf53809c.gif

链接:https://www.cnblogs.com/xiongzaiqiren/p/16895162.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Shell
    +关注

    关注

    1

    文章

    373

    浏览量

    25164
  • 脚本
    +关注

    关注

    1

    文章

    407

    浏览量

    29050

原文标题:脚本美化高手:轻松实现文本颜色和背景定制的酷炫Shell技巧

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【瑞萨RA6E2】板载uart测试,控制台shell及带颜色输出log的实现

    的控制台,接下来我们就移植一个开源的shell到开发板中,实现如linux那样的交互体验。我们要移植的是nr_micro_shell,开源地址https://gitee.com/nrush
    发表于 11-09 23:50

    【技术分享】正确编写SysV Init脚本实现Systemd兼容(上)

    嵌入式的ubuntu系统如何写好SysVInit脚本呢?与system服务又有什么差别呢?一起随着文章来探究吧。问题背景许多传统Linux服务仍使用SysVInit脚本(/etc/init.d
    的头像 发表于 10-28 11:45 533次阅读
    【技术分享】正确编写SysV Init<b class='flag-5'>脚本</b>以<b class='flag-5'>实现</b>Systemd兼容(上)

    shell基本介绍及常用命令shell基本介绍

    执行结果呈现给用户;同时Shell也是一种解释性的编程语言或者脚本语言,开发容易可以在短时间内完成功能强大又好用的脚本,可以在不同的系统上移植非常方便。Shell的特性不同的发行版本使
    发表于 09-28 09:05

    【RA-Eco-RA6M4开发板评测】移植shell实现命令交互

    代码见 一. 前言前面我们实现了标准输入输出,为了进一步方便交互调试,我们继续来实现一个精简的shellShell实现参考https:
    发表于 07-19 22:47

    【微五科技CF5010RBT60开发板试用体验】基于FIFO的串口驱动移植xprintf实现标准输入输出与shell实现

    本文分享基于FIFO实现串口驱动,方便提供好用的串口收发接口,并基于串口驱动移植xprintf实现标准输入输出 FIFO的实现参考公众号文章超级精简系列十三:超级精简的循环FIFO,
    发表于 06-27 22:37

    鸿蒙5开发宝藏案例分享---一多开发实例(图片美化

    案例,特别是这个图片美化应用的完整实现方案,必须立刻分享给大家!(搓手手.gif) ?** 案例背景:图片美化应用** 这个案例完美展示了如何用****一套代码适配手机/折叠屏/平板/
    发表于 06-03 16:09

    Shell脚本入门指南

    Shell 是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,把用户的输入, 解释给操作系统,然后处理操作系统的输出结果,输出到屏幕给与用户看到结果。
    的头像 发表于 06-03 10:47 987次阅读
    <b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>入门指南

    树莓派新手必看!在树莓派上编写和运行 Shell 脚本

    执行的操作。Shell脚本只是一个文本文件,包含一系列按顺序执行的Shell(命令行)命令,就好像这些命令直接在命令行中输入一样
    的头像 发表于 03-25 09:28 881次阅读
    树莓派新手必看!在树莓派上编写和运行 <b class='flag-5'>Shell</b> <b class='flag-5'>脚本</b>!

    【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目-实现开机起动

    接上文【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目 Linux 系统下 init 系统 大多数 Linux 发行版的 init 系统是和 System V 相兼容
    发表于 02-11 11:24

    【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目

    接上文[【ELF 2学习板试用】命令行功能测试-shell脚本进行IO控制-灯闪(https://https://bbs.elecfans.com/jishu_2474874_1_1.html
    发表于 02-06 11:55

    背景抑制光电开关的设计及应用

    算法程序对采集到的信号进行分析处理,区分目标物体反射光与背景反射光。 算法实现与优化 ·阈值比较法 :采用阈值比较法实现背景抑制,即设定合适的阈值,当采集到的信号强度超过该阈值且在特定
    发表于 01-11 13:43

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-shell编程入门提取字符并设置rtc时间

    awk用法 awk是一款文本处理工具,通常在Unix和Linux操作系统中使用,用于以行为单位对文本进行处理和操作。它可以读取输入文本,对其进行处理,生成报表、统计信息等,并将结果输出到标准输出设备
    发表于 12-12 17:26

    飞凌嵌入式ElfBoard ELF 1板卡-shell编程入门提取字符并设置rtc时间

    awk用法 awk是一款文本处理工具,通常在Unix和Linux操作系统中使用,用于以行为单位对文本进行处理和操作。它可以读取输入文本,对其进行处理,生成报表、统计信息等,并将结果输出到标准输出设备
    发表于 12-11 16:49

    飞凌嵌入式ElfBoard ELF 1板卡-自动化点亮LED灯shell点灯

    使用前面一节写的shell脚本led.sh,在终端执行命令:root@ELF1:~# chmod 777 led.sh root@ELF1:~# ./led.sh 执行该脚本后,三个 LED 灯会以每秒亮灭一次的节奏同步闪烁。
    发表于 12-06 13:52

    Linux从零到精通:最简单的Shell脚本入门教程

    通过简单的命令和脚本实现对系统的灵活控制和自动化管理。 shell脚本前言 shell脚本入门
    的头像 发表于 12-05 09:56 2305次阅读
    Linux从零到精通:最简单的<b class='flag-5'>Shell</b><b class='flag-5'>脚本</b>入门教程