您的位置:首页 > 运维架构 > Shell

shell脚本实现进度条功能

2017-07-02 22:49 453 查看
一,什么是shell脚本。

一个 shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。

Shell 有些独特,因为它不仅是一个功能强大的命令行接口,也是一个脚本语言解释器。我们将会看到, 大多数能够在命令行中完成的任务也能够用脚本来实现,同样地,大多数能用脚本实现的操作也能够 在命令行中完成。另外shell里面变量是弱变量类型的,这就意味着我们可以在任何时候直接使用变量,而不用定义。

二,用shell脚本实现进度条

2.1 初始版本:

#!/bin/bash
i=0
str=""
arry=("\\" "|" "/" "-")
while [ $i -le 100 ]
do
let index=i%4
printf "[%-100s] %d %c\r" "$str" "$i" "${arry[$index]}"
sleep 0.1
let i=i+1
str+="#"
done
printf "\n"


arry是我们定义的数组,它用来交替显示{“\”,”|”,”/”,”-“} 这四个字符中的一个,由于“\”在Linux中含有特殊含义,所以需要用两个“\”,一个起转义作用。

i用来记录当前进度,从0-100,每次使str=str+”#”,while循环每次输出str,进度,及arry中的字符。

运行结果:



2.2 改进版

首先看一下运行结果:



此时运行将会以颜色显示,并且在百分之20,百分之45,百分之75及之上显示不同的颜色,即产生颜色交替。该功能是在打印的时候加上颜色选项实现的,而颜色的代号又是个变量,在不同的区间会有不同的选择。

以下为实现代码:

#!/bin/bash
i=0
str=""
arry=("\\" "|" "/" "-")
while [ $i -le 100 ]
do
let index=i%4
if  [ $i -le 20 ]
then
let color=44
let bg=34
elif [ $i -le 45 ]
then
let color=43
let bg=33
elif [ $i -le 75 ]
then
let color=41
let bg=31
else
let color=42
let bg=32

fi
printf "\033[${color};${bg}m%-s\033[0m %d %c\r" "$str" "$i" "${arry[$index]}"
usleep 30000
let i=i+1
str+="#"
done
printf "\n"


与版本1不同之处便在我们在打印的时候加入了颜色属性,首先我们来学习一下如何在Linux中打出带有颜色的字体

文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:

  printf(“\033[字背景颜色;字体颜色m字符串\033[0m” );

示例:

printf(“\033[40;37 this will be colored\n\033[0m”);

echo -e “\033[40;37this will be colored\n\033[0m”

其中40,37分别代表字体背景颜色及字体颜色,在这里我们只需要将字体颜色与字体背景颜色选为相同的,便可以实现上图的功能。

以下为常用的颜色代号:

字背景颜色范围: 40--49                   字颜色: 30--39
40: 黑                           30: 黑
41: 红                           31: 红
42: 绿                           32: 绿
43: 黄                           33: 黄
44: 蓝                           34: 蓝
45: 紫                           35: 紫
46: 深绿                         36: 深绿
47: 白色                         37: 白色
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息