linux--shell脚本实现一个彩色进度条

时间:2024-03-28 20:52:32

实现一个彩色进度条,主要分为两个部分。其一:它得是一个进度条。其二:它得是彩色的进度条。

实现一个最简单的彩色进度条,得理解两个原理。

其一:实现一个进度条。

进度条其实有很多种。如下,很漂亮吧~但是还不曾了解其实现原理,哈哈哈哈哈~

linux--shell脚本实现一个彩色进度条

现在我要实现的是最简单的一种进度条,就是你能想到的最简单的。

一个"#"字走天涯。

#

##

###

####

...

只不过进度条是在一行实现的。

进度条的实现是很简单的,一个循环,一个字符串,还有一个回车符(这里的回车符就是回车符,不是回车换行)。

在这个循环中,这个字符串每次不断的增加一个“#”,每次增加完毕之后又回到该行行首(这就是回车符的作用了!)。随着循环不断,进度条也就实现了啊~

其二:彩色进度条

在进度条的基础上加上彩色的实现。

终端的字符颜色由转义序列(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 或 
\e[显示方式;前景色;背景色m输出字符串\033[0m

上边巴拉巴拉的那么多(上边是我摘抄的。),其实最终要的就只有两句。
1,终端的颜色输出和语言没有关系,终端的字符颜色由转义序列控制。转义序列的开头就是:‘\033[’或‘\e['
2,\033[显示方式;前景色;背景色m输出字符串\033[0m 或 \e[显示方式;前景色;背景色m输出字符串\033[0m。。。就是这个公式。至于值填多少,就百度吧!

最三点是我自己总结,第三点就是:在使用echo和printf调用如上公式时,可能会导致除了你所要处理的进度条成了彩色的,你的linux命令行也会成为彩色的。
所以在程序结束的时候,要将所有设置回复原状。

说了这么多,其实我们今天实现的彩色进度条的彩色原理也很简单,就是一句话,设置彩色的属性值,在循环中不断变化。就可以形成一个彩色的进度条了。
【有空我在研究研究,看看还有什么更加棒的彩色进度条嘛...或者有哪位大神看见了,教教我。。】


最后,文末呈上一个进度条shell脚本代码。【本代码适合有shell脚本基础的人。】

linux--shell脚本实现一个彩色进度条