编写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. springboot添加外部jar包及打包

    项目中除了从pom中添加依赖包,还可以添加本地的jar包,怎么做呢? 1.在src下新建目录lib,将jar包添加到lib中 2.在pom文件里添加配置以下属性,就可以使用jar包了 <depe ...

  2. EF知识和经验

    AsNoTracking提高查询性能 AsNoTracking的作用就是在查询的时候不做追踪,这样会查询的更快,但是这样做会有一个缺陷(不能对查询的数据做修改操作). var student2 = d ...

  3. C/C++、Java、Python谁是编译型语言,谁是解释型语言?

    最近各大互联网公司线上笔试,编程题目里的编译器只支持C/C++.Java,甚至有的支持javaScrpit和Pascal,就是不支持Python.让一直以来用惯了Python的我直吐血,于是今天痛定思 ...

  4. BFC浅析

    1.定义 BFC(Block formatting context)即"块级格式化上下文".它是一个独⽴的渲染区域,只有Block-level box参与, 它规定了内部的Bloc ...

  5. HDU——1020Encoding(水题,string过)

    Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  6. PHP中的验证码类(完善验证码)

    运行结果: <!--vcode.class.php--> <?php class Vcode { private $width; //宽 private $height; //高 p ...

  7. APUE 学习笔记(九) 高级I/O

    1. 非阻塞I/O 低速系统调用时可能会使进程永远阻塞的一类系统调用,包括以下调用: (1)某些文件类型你(网络socket套接字.终端设备.管道)暂无可使用数据,则读操作可能会使调用者永远阻塞 (2 ...

  8. Java 基础【04】数组内存分配

    可能Java 数组大家都很熟悉,最近我遇到了一个关于Java 数组内存分配的问题. 突然发现许多书上“基本数据类型存储在栈内存当中,对象则保存在堆内存”这句话完全是错误的.下面是个简单的例子代码: p ...

  9. SourceTree免注册并连码云

    1 在C:\Users\用户\AppData\Local\Atlassian\SourceTree目录下新建 accounts.json 其中AppData是隐藏文件夹 2 输入 [ { " ...

  10. [原创][FPGA]时钟分频之奇分频(5分频)

    0. 简介 有时在基本模块的设计中常常会使用到时钟分频,时钟的偶分频相对与奇分频比较简单,但是奇分频的理念想透彻后也是十分简单的,这里就把奇分频做一个记录. 1. 奇分频 其实现很简单,主要为使用两个 ...