bash给脚本加进度条_shell脚本实现多彩进度条

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

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

如何在同一行实现定时刷新

定时打印使用while循环触发,代码中sleep线程休眠和i++自增长模拟,实际使用中应该封装进度值的set方法由外部控制进度。

使用格式化打印\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

e35f5f2268ff

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

e35f5f2268ff

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"

参考文章:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值