0
点赞
收藏
分享

微信扫一扫

【shell实战】使用shell实现一个进度条


前言

之前有小伙伴留言说,有没有那种花里胡哨的东西,比如进度条,今天他来了。

思路

1. 进度条的组成

进度条由 五个字符组成:

主进度条: #
花里胡哨的转圈圈: | \ - /

#号用于生成进度:

【shell实战】使用shell实现一个进度条_i++


【shell实战】使用shell实现一个进度条_shell脚本_02


【shell实战】使用shell实现一个进度条_进度条_03

【shell实战】使用shell实现一个进度条_进度条_04

| \ - / 这四个用于在百分比后面转圈

2. 进度条的进度

一共是100%, 我们按照 每次增加4%的速度往上增加, 即: 0% ,4% 8%,12%,一直到百分百。

定义i =0 ; $i*4就表示每次增加4

i 每次增加1 let i++

每增加4% 我们就打印一个井号。

【shell实战】使用shell实现一个进度条_取值_05


这张图里: 0%, 4%,8%,12%, 一共打印了4个#号。

3. 花里胡哨的转圈圈

同样的 我们把 | \ - / 定义为一个数组 ch=(’|’ ‘’ ‘-’ ‘/’),取值 ch[0] ,ch[1] ,ch[2]. ch[3]

为了防止出现 ch[5] 超出索引值。 我们让索引值每次都商4, 这样就可以确保不会出现5的索引。
取索引: ch[$index]
如何商4: let index= i%4

4. 需要打印的内容

printf "[%-25s][%d%%][%c]\r" $str $(($i*4)) ${ch[$index]}

【shell实战】使用shell实现一个进度条_取值_06


ch[$index] 打印四个符号,每次取值一个,看上去像转圈。

代码源码

#!/bin/bash
i=0
str='#'
ch=('|' '\' '-' '/')
index=0
while [ $i -le 25 ]
do
    printf "[%-25s][%d%%][%c]\r" $str $(($i*4)) ${ch[$index]}
    str+='#'
    let i++
    let index=i%4
    sleep 0.1
done
printf "\n"
echo "安装完成"

总结

使用shell实现一个进度条的简单版,其实还有很多很好的方案,但对于一个追求完美的人来说,每个方案都有相应的不足。


举报

相关推荐

0 条评论