shell脚本实现进度条功能

一,什么是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: 白色

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值