编写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. JAVA调用oracle存储过程实例

    1.创建添加存储过程 CREATEORREPLACEPROCEDURE stu_proc(v_id INNUMBER, v_name INVARCHAR2, v_age INNUMBER) AS BE ...

  2. iOS----精品开源库-开发强力助攻

    30个精品iOS开源库,超强助攻 你不会想错过他们,真的. 我爱开源.  文章的尾部你会看到一个太长不看的版本——一个简单的列表,只有标题和到项目的链接.如果你发现这篇文章是有用的,把它和你的iOS开 ...

  3. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

  4. 【Luogu】P3971Alice And Bob(贪心)

    题目链接 容易发现值为x的点只可能从值为x-1的点转移过来,所以我们把原序列连成一棵树,dfs序就是原序列的一种形式. 就可以直接求啦 #include<cstdio> #include& ...

  5. 使用electron将单页面vue webapp 打包成 PC端应用

    在看张鑫旭博客得时候看到了electron这个东西,来了兴趣,就按照上面写的将已经做好得vue项目拿来试了试,出乎意料得顺利 electron简单说下electron,就是把 chrome内核和你的项 ...

  6. 解决c#所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。 转载

    最近做一个后来程序,启动了事务后有一段操作业务,当运行一段时间后,出现这个异常 CLR 无法从 COM 上下文 0x1b1c38 转换为 COM 上下文 0x1b1da8,这种状态已持续 60 秒.拥 ...

  7. [Codeforces Round #170 Div. 1] 277A Learning Languages

    A. Learning Languages time limit per test:2 seconds memory limit per test:256 megabytes input standa ...

  8. 标准C程序设计七---76

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  9. Android系统默认语言改为中文

    第一种方法: 修改 build/tools/buildinfo.sh echo "ro.product.locale.language=zh"echo "ro.produ ...

  10. wpf GridControl selectAll UnSelect

    <Window x:Class="WpfApplication1.GridControlView" xmlns="http://schemas.microsoft. ...