美文网首页
shell脚本实现多彩进度条

shell脚本实现多彩进度条

作者: hahand | 来源:发表于2020-08-20 16:02 被阅读0次

自己写的小脚本中如果有耗时操作业务,比如网络请求,文件处理,就要考虑一下加入一个进度条来提升体验。

实现一个进度条需要解决的一些技术点:

  • 如何在同一行实现定时刷新
    1. 定时打印使用while循环触发,代码中sleep线程休眠和i++自增长模拟,实际使用中应该封装进度值的set方法由外部控制进度。
    2. 使用格式化打印\r,保证每一次渲染都在同一行进行
  • 如何实现终端的彩色打印

    1.使用prinf或者echo -e进行格式化打印,打印字符串由类似\e[30;47m开始和\e[0m结尾。设置中\e[为固定格式,0m表示为终端默认样式,自定义样式用两位十位数标记,用;分隔,其中十位为3表示设置前景色,十位为4表示设置背景色,个位数字的意义如下表。
    2.开启定时循环,设置样式个位使用i%8即可动态调整输出字符颜色。

0 1 2 3 4 5 6 7
black red green yellow blue purple cyan white
  • loading效果

同一位置定时顺序打印"|" "/" "-" "\\",其中反斜杠\必须写成\\;同理,进度条百分号%必须写成%%

  • 如何让进度值显示在进度条中间
    1.先拼好整体打印字符串,把进度值夹在前后的空格之中。
    2.使用"${totalstr:0:$i+1}"截取高亮部分,使"${totalstr:$i+1}"截取背景部分,再重新组合。

实现效果1

progress.gif
#!/bin/bash

#隐藏光标
printf "\e[?25l" 

i=0;
str=""
arr=("|" "/" "-" "\\")
while [ $i -le 100 ]
do
  let index=i%4
  let indexcolor=i%8
  let color=30+indexcolor
  #打印进度
  printf "\r\e[0;$color;1m[%-100s][%d%%]%c\e[0m" "$str" "$i" "${arr[$index]}"
  sleep 0.1
  let i++
  str+='='
done

#显示光标
printf "\e[?25h""\n"

实现效果2

white_progress.gif
#!/bin/bash

#隐藏光标
printf "\e[?25l" 

i=0;
str=""
bgcolor=43
space48="                                                "

while [ $i -le 100 ]
do
  percentstr=$(printf "%3s" $i)
  totalstr="${space48}${percentstr}${space48}"
  leadingstr="${totalstr:0:$i+1}"
  trailingstr="${totalstr:$i+1}"
  #打印进度
  printf "\r\e[30;47m${leadingstr}\e[37;40m${trailingstr}\e[0m"
  sleep 0.05
  let i++
  str+="="
done

#显示光标
printf "\e[?25h""\n"

参考文章:

shell脚本实现多彩进度条
shell隐藏显示光标
shell打印颜色

相关文章

网友评论

      本文标题:shell脚本实现多彩进度条

      本文链接:https://www.haomeiwen.com/subject/ccnjactx.html