实现一个彩色进度条,主要分为两个部分。其一:它得是一个进度条。其二:它得是彩色的进度条。
实现一个最简单的彩色进度条,得理解两个原理。
其一:实现一个进度条。
进度条其实有很多种。如下,很漂亮吧~但是还不曾了解其实现原理,哈哈哈哈哈~
现在我要实现的是最简单的一种进度条,就是你能想到的最简单的。
一个"#"字走天涯。
#
##
###
####
...
只不过进度条是在一行实现的。
进度条的实现是很简单的,一个循环,一个字符串,还有一个回车符(这里的回车符就是回车符,不是回车换行)。
在这个循环中,这个字符串每次不断的增加一个“#”,每次增加完毕之后又回到该行行首(这就是回车符的作用了!)。随着循环不断,进度条也就实现了啊~
其二:彩色进度条
在进度条的基础上加上彩色的实现。
终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。转义序列以控制字符’ESC’开头。该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033。多数转义序列超过两个字符,故通常以’ESC’和左括号’[‘开头。该起始序列称为控制序列引导符(CSI,Control
Sequence Intro),通由‘\033[’或‘\e[’代替。
通过转义序列设置终端显示属性时,可采用以下格式:
\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
其中,‘\033[’或‘\e[’引导转义序列,‘m’表示设置属性并结束转义序列。Param为属性值,{…}表示可选(多个参数之间用分号隔开,与顺序无关)。
———————————————————————————————————————————
转义序列相关的常用参数如下(通过man console_codes命令可查看更多的参数描述):
显示: 0(默认)、1(粗体/高亮)、22(非粗体)、4(单条下划线)、24(无下划线)、5(闪烁)、25(无闪烁)、7(反显、翻转前景色和背景色)、27(无反显)
颜色: 0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白)
前景色为30+颜色值,如31表示前景色为红色;背景色为40+颜色值,如41表示背景色为红色。
设置格式:
\033[显示方式;前景色;背景色m输出字符串\033[0m 或
通过转义序列设置终端显示属性时,可采用以下格式:
\033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
其中,‘\033[’或‘\e[’引导转义序列,‘m’表示设置属性并结束转义序列。Param为属性值,{…}表示可选(多个参数之间用分号隔开,与顺序无关)。
———————————————————————————————————————————
转义序列相关的常用参数如下(通过man console_codes命令可查看更多的参数描述):
显示: 0(默认)、1(粗体/高亮)、22(非粗体)、4(单条下划线)、24(无下划线)、5(闪烁)、25(无闪烁)、7(反显、翻转前景色和背景色)、27(无反显)
颜色: 0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白)
前景色为30+颜色值,如31表示前景色为红色;背景色为40+颜色值,如41表示背景色为红色。
设置格式:
\033[显示方式;前景色;背景色m输出字符串\033[0m 或
\e[显示方式;前景色;背景色m输出字符串\033[0m
上边巴拉巴拉的那么多(上边是我摘抄的。),其实最终要的就只有两句。
1,终端的颜色输出和语言没有关系,终端的字符颜色由转义序列控制。转义序列的开头就是:‘\033[’或‘\e['
2,\033[显示方式;前景色;背景色m输出字符串\033[0m 或 \e[显示方式;前景色;背景色m输出字符串\033[0m。。。就是这个公式。至于值填多少,就百度吧!
最三点是我自己总结,第三点就是:在使用echo和printf调用如上公式时,可能会导致除了你所要处理的进度条成了彩色的,你的linux命令行也会成为彩色的。
所以在程序结束的时候,要将所有设置回复原状。
说了这么多,其实我们今天实现的彩色进度条的彩色原理也很简单,就是一句话,设置彩色的属性值,在循环中不断变化。就可以形成一个彩色的进度条了。
【有空我在研究研究,看看还有什么更加棒的彩色进度条嘛...或者有哪位大神看见了,教教我。。】
最后,文末呈上一个进度条shell脚本代码。【本代码适合有shell脚本基础的人。】