如何在Linux终端里用Shell和C输出带颜色的文字

转载 2013年12月02日 16:33:26

 我们知道,使用ls命令列出文件列表时,不同的文件类型会用不同的颜色显示。那么如何实现这样带颜色的文本输出呢?答案并不复杂,不管是用shell还是C语言。

一、shell下的实现方法

       先来讲在shell下,如何实现。用echo命令就可以实现,参看以下例子:

       echo  -e  "\033[32mHello, world!"

       当你在终端里敲下这条命令后,是不是发现系统用绿色输出了"Hello,world!",不止如此,连之后的命令提示符都变成了绿色?不要着急,听我继续说。echo命令-e选项的作用是激活终端对反斜线转义符(即\)的解释。引号内\033用于引导非常规字符序列,在这里的作用就是引导设置输出属性,后边的[32m就是将前景色设置为绿色,字母m表示设置的属性类别,数字代表属性值。设置可以单独使用,例如:

       echo -e  "\033[0m"

       这行命令的作用是恢复属性为默认值,也就是说0m设置项用于恢复默认值。现在你的终端是不是又一切正常了?

       理解了这些,剩下的就简单了。用这种命令,除了设置文本前景色,还可以设置很多属性。下边列出其他的设置项:

      --------------------------------------------------------------------------

      \033[0m 关闭所有属性
      \033[1m 设置高亮度
      \033[4m 下划线
      \033[5m 闪烁
      \033[7m 反显
      \033[8m 消隐
      \033[30m 至 \33[37m 设置前景色
      \033[40m 至 \33[47m 设置背景色
      \033[nA 光标上移n行 
      \033[nB 光标下移n行
      \033[nC 光标右移n行
      \033[nD 光标左移n行
      \033[y;xH设置光标位置
      \033[2J 清屏
      \033[K 清除从光标到行尾的内容
      \033[s 保存光标位置 
      \033[u 恢复光标位置
      \033[?25l 隐藏光标
      \033[?25h 显示光标

      --------------------------------------------------------------------------

      各数字所代表的颜色如下:

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

      字颜色:30-----------39
      30:黑
      31:红
      32:绿
      33:黄
      34:蓝色
      35:紫色
      36:深绿 
      37:白色

      另外,同类的多种设置项可以组合在一起,中间用分号(;)隔开。如下:

      echo -e "\033[20;1H\033[1;4;32mHello,world\033[0m"

      这行命令首先\033[20;1H将光标移动到终端第20行第1列,之后的\033[1;4;32m将文本属性设置为高亮、带下划线且颜色为绿色,然后输出Hello,world;最后\033[0m将终端属性恢复为默认值,这样就不会看到连命令完成后的命令提示符也变了样儿了。

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

二、如何在C编程中实现?

      理解了以上在Shell中的实现方法,关于在C中如何实现就很简单了。可以说只需要用printf函数代替上边的echo -e就OK了。参见下例:

      int color = 32;

      printf("\033[20;1H\033[1;4;%dmHello, world.\033[0m", color);

      这个例子类似上边shell中最后那个例子,只是这里颜色值通过变量color来指定(当然,也可以直接指定)。

三、联想

      看到这里你可能会想,是不是在其他编程语言里也可以用类似的方法实现对终端输出的控制呢?答案是肯定的!比如在python中,可以如下输出:

      color=32

      print “\033[20;1H\033[1;4;%dHello, world.\033[0m"%color

      这个例子的效果跟上边C的例子是相同的。

Linux终端调整输出色彩和光标位置的简单示例

相关的知识实现的原理并不复杂,借助了Linux的 ANSI 颜色控制序列,只要在打印输出的过程中使用这些序列,就能做到彩色的字符、背景色输出,以及控制光标在打印时的位置。简单的代码示例以下代码都在树莓...
  • u010940020
  • u010940020
  • 2015年09月06日 21:19
  • 2970

linxu bash修改终端提示颜色

原文地址:http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2015年05月10日 02:29
  • 3998

shell脚本输出输出带颜色内容

本文主要介绍了如何在shell脚本中输出带颜色的内容。 shell脚本中 echo 和 printf 都可以输出内容。 我们看以下示例echo -e "\033[43;35m david use e...
  • David_Dai_1108
  • David_Dai_1108
  • 2017年04月23日 00:24
  • 1540

如何在Linux终端里用Shell和C输出带颜色的文字

我们知道,使用ls命令列出文件列表时,不同的文件类型会用不同的颜色显示。那么如何实现这样带颜色的文本输出呢?答案并不复杂,不管是用shell还是C语言。 一、shell下的实现方法        ...
  • yu132563
  • yu132563
  • 2017年07月26日 09:53
  • 125

如何在Linux终端里用Shell和C输出带颜色的文字

我们知道,使用ls命令列出文件列表时,不同的文件类型会用不同的颜色显示。那么如何实现这样带颜色的文本输出呢?答案并不复杂,不管是用shell还是C语言。 一、shell下的实现方法        ...
  • wild_horse
  • wild_horse
  • 2011年10月08日 17:22
  • 1018

Linux下Shell脚本输出带颜色文字

文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:     echo -e "\033[44;37;5m ME \033[0m COOL"     以上命令设置作用如下:背景色为蓝色,前景...
  • fred520
  • fred520
  • 2011年07月19日 14:57
  • 461

Linux学习篇之---shell下输出带颜色文字

Linux学习篇之---shell下输出带颜色文字         首先先回顾一下Linux 环境下echo命令: 名称 echo - 显示一行文本 概要 echo [...
  • A_little_e
  • A_little_e
  • 2015年12月04日 17:07
  • 1292

Linux C在终端出输出颜色

Linux在终端出输出颜色 #include ; int main (int argc, char **argv) {         printf ("\033[31mThe color of...
  • ambihan
  • ambihan
  • 2014年01月05日 21:53
  • 321

linux终端中输出彩色字体(C/SHELL)

这几天在用libvlc的时候看到它在terminal里面输出彩色字体觉得挺好玩的,以为是用ncurses实现的,后来一查原来用ANSI C的转义字符就可以实现,不过好现只在linux下有效吧, win...
  • rainie258
  • rainie258
  • 2013年09月14日 18:09
  • 1378

linux终端中输出彩色字体(C/SHELL)

这几天在用libvlc的时候看到它在terminal里面输出彩色字体觉得挺好玩的,以为是用ncurses实现的,后来一查原来用ANSI C的转义字符就可以实现,不过好现只在linux下有效吧, win...
  • ujnzxw
  • ujnzxw
  • 2013年11月17日 01:05
  • 498
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在Linux终端里用Shell和C输出带颜色的文字
举报原因:
原因补充:

(最多只允许输入30个字)