编写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. 解决webstorm安装babel卡死问题

    2017.07.16 现在大家可以直接使用yarn的方式安装包,可以解决babel目录过长导致webstorm卡死的问题. yarn的安装不会执行组件命令就不会导致node_modules下面继续嵌套 ...

  2. BZOJ1226 [SDOI2009]学校食堂Dining 【状压dp】

    题目 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示 ...

  3. Caused by: java.io.FileNotFoundException: class path resource

    异常: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.c ...

  4. linux--bash: redis-server: 未找到命令

    linux 安装redis过程中出现了异常,make不通过,异常如下: [root@localhost redis-2.8.3]# make cd src && make all ma ...

  5. 博彩游戏(tyvj 1519)

    背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的子串,那么就中奖了,否 ...

  6. Redis Cluster 集群的实现和管理

    系统环境 CentOS 7 集群规划 在一台物理机(实际部署应当分散到多个物理机上),创建6个Redis节点,其中3个主节点.3个从节点. 节点表: IP 端口 主从 路径 192.168.1.21 ...

  7. 【BZOJ2243】染色(树链剖分)

    题意: 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221”由 ...

  8. node总结--回调函数阻塞和非阻塞代码实例

    阻塞代码实例: var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data. ...

  9. 【MFC】error RC2108: expected numerical dialog constant(转)

    原文转自 http://blog.csdn.net/renyhui/article/details/23120469 [解决方案]在控件ID后面添加 "Static", SS_BI ...

  10. Change visual studio 2015 enterprise installation path(转)

    I would like to install VS2015 in a drive different than C:. The problem is that when I run the inst ...