编写shell脚本的时候。通过改变shell的显示颜色,不但可以改变使用shell终端的体验,并且更为有用的是,可以通过改变显示内容的颜色来区分正常输出。warning和error等不同关注级别的输出内容。

1、转义序列(Escape sequence)

An escape sequence is a series of characters used to change the state of computers and their attached peripheral devices. These are also known as control sequences, reflecting
their use in device control. Some control sequences are special characters that always have the same meaning. Escape sequences use an escape character to change the meaning of the characters which follow it, meaning that the characters can be interpreted as
a command to be executed rather than as data.

简单地说。就是转义序列可以改变电脑和外设的状态。这里用的就是利用转义字符来改变显示器的显示颜色。

2、echo命令

echo命令中有-e选项。通过这个选项。能够在该条命令中开启对反斜杠转义的解释。后面的选项中追加适当的转义序列能够改变echo命令输出的显示颜色。echo中文字显示颜色相关的參数主要有三个Style,Frontground和Background。每一个參数有7个值详细的格式例如以下:

Style           Foreground      Background
1st Digit 2nd Digit 3rd Digit
0 - Reset 30 - Black 40 - Black
1 - FG Bright 31 - Red 41 - Red
2 - Unknown 32 - Green 42 - Green
3 - Unknown 33 - Yellow 43 - Yellow
4 - Underline 34 - Blue 44 - Blue
5 - BG Bright 35 - Magenta 45 - Magenta(洋红色)
6 - Unknown 36 - Cyan 46 - Cyan(蓝绿色)
7 - Reverse 37 - White 47 - White

通过将命令echo -e "\e[Style;Foreground;BackgroundmTHINGSTOPRINT"中的Style、Foreground和Background换成上面的数字就能够改变后面THINGSTOPRINT的显示颜色。比方。$ echo -e "\e[1;32;43mHello World! "的执行结果如图1。

图1

注:这里之所以Hello World!最后的叹号后面加一个空格,是由于unix shell中叹号是保留字符,用来调用历史命令。比方!cmd就运行上一条运行过的cmd开头的命令。而!cmd:p则是仅仅是将上一条cmd开头的命令唤出显示出来。而不运行。

能够发现这种话,兴许全部行的shell显示颜色都会被改变,这往往不是我们想要的,所以一般来说,我们会在这种命令的末尾将这些显示设置给Reset。同一时候。为了不被上一次命令影响,也会在之前设置style的值来进行開始设置之前的reset。(当然,假设要将style设置成underline或者FGorBG Bright之类的值得时候。就没法在開始设置之前进行reset了,可是,最后的reset是不管怎样都是必要的,除非你想接下来全部的显示一直採用当前的设置。)以下几条命令的执行结果例如以下图2。

命令:

echo -e "\e[1;32;43mHello World! \e[0m"
echo -e "\e[0;32;43mHello World! \e[0m"
echo -e "\e[4;32;43mHello World! \e[0m"
echo -e "\e[5;32;43mHello World! \e[0m"

图2 执行结果

3、打印全部显示效果的脚本

脚本test.sh的内容:
#/bin/bash
for TYLE in 0 1 2 3 4 5 6 7;
do
for FG in 30 31 32 33 34 35 36 37;
do
for BG in 40 41 42 43 44 45 46 47;
do
CTRL="\033[${STYLE};${FG};${BG}m"
echo -en "${CTRL}"
echo -n "${STYLE};${FG};${BG}"
echo -en "\033[0m"
done
echo
done
echo
done
#Reset
echo -e "\033[0m"

注:这里改脚本中用到了echo的-n选项。它的作用就是控制不要再输出内容的后面追加换行,与之相应的仅仅有一个echo的命令就是简单地输出一个空行。达到换行的目的。

sh test.sh执行该脚本,就能够看到彩虹般的结果。如图3(结果有点长,这里仅仅截取了一部分)。

图3 彩虹

unix改变shell显示颜色的更多相关文章

  1. iOS7中修改StatusBar的显示颜色

    iOS7中修改StatusBar的显示颜色 效果图如下: 在iOS7中想手动修改statusBar的颜色,第一步需要做的就是在plist文件中设置View controller-based statu ...

  2. 汇编题目:在DOS下,按F1键后改变当前屏幕的显示颜色

    我们都知道int9中断是键盘的按键中断程序,按下键盘触发int9中断,不懂int9中断的请自己去百度查查说明和用法 利用中断任务安装一个新的int 9中断例程,功能:在DOS下,按F1键后改变当前屏幕 ...

  3. VUE Node模式下,如何改变菜单的颜色,如何将超长文字缩略显示,在鼠标进入后展开全部显示,鼠标移出则恢复缩略显示

    VUE Node模式下,如何改变菜单的颜色,如何将超长文字缩略显示,在鼠标进入后展开全部显示,鼠标移出则恢复缩略显示: “事件”引起变量值的变化,系统引擎自动根据变量值的变化刷新页面 在VUE Nod ...

  4. linux shell简单快捷方式与通配符(元字符)echo -e文本显示颜色

    1.shell常用快捷方式 ^R 搜索历史命令^D 退出^A 光标移动到命令行最前^E 光标移动到命令行最后^L 清屏^U 光标之前删除^K 光标之后删除^Y 撤销^S 锁屏^Q 解锁 2.多条命令执 ...

  5. UNIX系统的显示时间何时会到达尽头

    本文分为三个小块: 一.UNIX系统中时间的存储形式: 二. time_t 的最大值是多少: 三. 将time_t 的最大值转化为真实世界的时间: #---------------------# # ...

  6. PowerShell_零基础自学课程_2_Powershell与Cmd以及Unix/Linux Shell

    上篇文章我说道,windows为了改变用户对其console界面的诟病,于是就从windows   vista开始,计划要改变这种局面,于是就有 了Powershell的出现. 1.兼容shell命令 ...

  7. easyui的datagrid改变整行颜色

    easyui的datagrid改变单元格颜色方法1:https://www.cnblogs.com/raitorei/p/10395233.html easyui的datagrid改变单元格颜色方法2 ...

  8. easyui的datagrid改变单元格颜色

    另一种方法:https://www.cnblogs.com/raitorei/p/10395233.html easyui的datagrid改变整行颜色:https://www.cnblogs.com ...

  9. UNIX系统的显示时间何时会到尽头

    本文转载自:http://www.cnblogs.com/dfcao/p/expertCprogramming_intr0.html 本文分为三个小块: 一.UNIX系统中时间的存储形式: 二. ti ...

随机推荐

  1. pytorch conditional GAN 调试笔记

    推荐的几个开源实现 znxlwm 使用InfoGAN的结构,卷积反卷积 eriklindernoren 把mnist转成1维,label用了embedding wiseodd 直接从tensorflo ...

  2. ubuntu安装jdk<服务器>

    服务器 阿里云服务器Ubuntu安装jdk7 2014-08-25 16:44 |  coding云 |  5825次阅读 | 6条评论   一.下载jdk 可以先下载到本地,然后ftp到服务器 官方 ...

  3. 刷题总结——小c找朋友(bzoj4264 集合hash)

    题目: Description 幼儿园里有N个小C,两个小C之间可能是朋友也可能不是.所有小C之间的朋友关系构成了一个无向图,这个无向图中有M条边. 园长ATM发现对于两个(不同的)小Ci和j,如果其 ...

  4. P1382 楼房 (扫描线,线段树)

    题目描述 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i]).地平线高度为0.在轮廓 ...

  5. setsockopt等高级使用

    参考: setsockopt函数使用http://hi.baidu.com/yelangdefendou/item/74161d0f384abd3c4ac4a316http://blog.csdn.n ...

  6. SystemServer分析

    1 SystemServer分析 SystemServer的进程名就是前面所说的“system_server”,是zygote进程“app_process”fork出来的第一个子嗣,其重要性不言而喻. ...

  7. d3 使用数据

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. UVA 116 Unidirectional TSP(DP最短路字典序)

    Description    Unidirectional TSP  Background Problems that require minimum paths through some domai ...

  9. DispatcherServlet与ContextLoaderListener的对比

    1. 从DispatcherServlet和ContextLoaderListener的初始化过程可以看出,二者分别会生成一个WebApplicationContext,且以不同的attrName注册 ...

  10. Codeforces 576D Flights for Regular Customers(矩阵加速DP)

    题目链接  Flights for Regular Customers 首先按照$d$的大小升序排序 然后分成$m$个时刻,每条路径一次处理过来. $can[i][j]$表示当前时刻$i$能否走到$j ...