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

我们知道,使用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的例子是相同的。

时间: 2024-12-30 04:11:34

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

Linux终端里的记录器

我们在调试程序的时候,免不了要去抓一些 log ,然后进行分析. 如果 log 量不是很大的话,那很简单,只需简单的复制粘贴就好. 但是如果做一些压力测试,产生大量 log ,而且系统内存又比较小(比如嵌入式设备),那要怎么处理呢? 当然,secureCRT 和 mobaXterm 都有将日志保存到本地的功能,使用起来也是很方便.但是有些工具,比如 putty,就没这样的功能了. 这时终端里的记录器-- script 就派上用场了. 使用场景 调试会产生大量 log 的应用程序,并且需要保存到本

如何在 Linux 终端中知道你的公有 IP

导读 在本文中我将会介绍在几种在 Linux 终端中查看你的公有 IP 地址的方法.这对普通用户来说并无意义,但 Linux 服务器(无GUI或者作为只能使用基本工具的用户登录时)会很有用.无论如何,从 Linux 终端中获取公有 IP 在各种方面都很意义,说不定某一天就能用得着. 公有地址由 InterNIC 分配并由基于类的网络 ID 或基于 CIDR 的地址块构成(被称为 CIDR 块),并保证了在全球互联网中的唯一性.当公有地址被分配时,其路由将会被记录到互联网中的路由器中,这样访问公有

python在linux中输出带颜色的文字的方法

在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中.而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱了我们想要的信息. 我们可以通过对有用的信息设置不同颜色来达到醒目的效果,因为我平时都是在linux下开发,而linux终端中的颜色是用转义序列控制的,转义序列是以ESC开头,可以用\033完成相同的工作(ESC的ASCII码用十进制表示就是27,等于用八进制表示的33). 书写格式,和相关说明如下: 格式:\0

shell脚本中输出带颜色字体实例分享

shell脚本中echo显示内容带颜色显示,需要使用参数-e  格式如下:  echo -e "\033[字背景颜色:文字颜色m字符串\033[0m"  eg:  echo -e "\033[36;34m hello world  \033[0m" echo -e "\033[35;32m Subject:$Ip \033[0m" 其中41的位置代表底色, 36的位置是代表字的颜色 下面提供相应的字和背景颜色,可以尝试找出不同颜色搭配 echo

教你如何在linux上装逼,shell中颜色的设置

linux启动后环境变量加载的顺序为:etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc] 想修改某用户登录后shell字体的颜色,可在~/.bashrc中添加PS1内容即可,以下是我机器的设置: # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i'

Linux终端复用神器-Tmux使用梳理

原文参考:https://www.cnblogs.com/kevingrace/p/6496899.html Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机.是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活.动态的进行各种布局和操作.对于Tm

在Linux终端中查看公有IP的方法详解

首先回顾一下一般的查看IP的命令: ifconfigLinux查看IP地址的命令--ifconfigifconfig命令用于查看和更改网络接口的地址和参数 $ifconfig -a  lo0: flags=849 mtu 8232 inet 127.0.0.1 netmask ff000000  hme0: flags=863 mtu 1500 inet 211.101.149.11 netmask ffffff00 broadcast 211.101.149.255 ether 8:0:20:

Linux终端的总结和shell

早期的计算机因为你懂得的原因有多个物理终端(通过连接计算机的端口呀什么来实现),这里的终端就是I/O设备.而计算机本身固有的I/O设备(非外连)就称为console控制台. 现在linux系统中概念如下: 物理终端:开机后系统尚未运行虚拟终端(就是一程序)前的状态,也称为是控制台console. 虚拟终端:由程序进行虚拟出来的终端,对早期计算机模式的效仿,linux中有6个(不连图形终端),可以相互切换.虚拟终端运行在物理终端之上. 模拟终端:1,远程shell登陆的终端.2,图形终端中启动sh

linux终端 及 tty who echo 命令用法 和 shell bash 变量

linux终端分为物理终端,伪终端,串行终端,虚拟终端 物理终端:/dev/console 伪终端(远程终端   图形下的终端):/dev/pts/#(数字) 虚拟终端:/dev/tty# 串行终端:/dev/ttys# startx 启动图形界面 ctrl+c 取消正在执行的命令 shift+pageup/pagedown   在命令界面翻屏 tty 命令   显示当前终端对应终端设备文件 who命令   查看当前系统上登录的所有账号 who  am  i     显示当前终端登录呃账号 sh