以前用C语言写过一个进度条。具体实现细节http://blog.csdn.net/qq_35524916/article/details/55657147
最近学习shell,就用彩色进度条来练练手。
首先是,基础的进度条基本功能
#!/bin/bash
function bar()
{
i=0
bar=""
lable=('|' '\\' '-' '/')
whlie [ $i -le 100]
do
let index=i%4
printf "[%-100s][%d%%][%c]\r" "$bar" "$i" "${lable[$index]}"
bar+='#'
sleep 0.1
let i++
done
echo ""
}
function main()
{
bar
}
main
但是,网上有好多的进度条都是炫彩的。如何实现呢?
echo -e 标识转义生效 -n 标识最后不输出换行符, 代码中的echo 只用来控制终端的颜色。
其格式为 echo “\e[1; xm”
其中m的取值为:
30m 黑色
31m 红色
32n 绿色
33m 黄色
34m 蓝色
35m 洋红
36m 青色
37m 白色
代码中用 百分百i 对 8 取模再加30,产生闪烁的效果。
添加之后代码
#!/bin/bash
function bar()
{
i=0
bar=""
lable=('|' '\\' '-' '/')
whlie [ $i -le 100]
do
let index=i%4
let color=30+i%8 #字体有8种状态30~37
echo -en "\e[1;"$color"m" #sleep一次,字体换一次颜色
printf "[%-100s][%d%%][%c]\r" "$bar" "$i" "${lable[$index]}"
bar+='#'
sleep 0.1
let i++
done
echo "" #效果相当于一个换行
echo -e "\e[0m" #回复到原来颜色
}
function main()
{
bar
}
main
结果图: